我正在为COM+应用程序设置构建一个报告。我的第一步是读取所有的应用程序。
在我的本地计算机上,这不是一个问题,我这样做:
$comAdmin = New-Object -com ("COMAdmin.COMAdminCatalog.1")
$applications = $comAdmin.GetCollection("Applications")
$applications.Populate()
foreach ($application in $applications)
{
write-host $application.Name
}工作得很好!但我需要从远程服务器获取信息。我试着这样做:
$Server = "chvmes01;chvmes02"
$option = [System.StringSplitOptions]::RemoveEmptyEntries
$ServerArr = $Server.Split(";",$option)
foreach($s in $ServerArr){
$comAdmin = Invoke-Command -Session $session -Scriptblock {New-Object -Com "ComAdmin.ComAdminCatalog"}
$applications = Invoke-Command -Session $session -Scriptblock {param($comAdmin) $comAdmin.GetCollection("Applications")} -ArgumentList $comAdmin
Remove-PSSession $session
}但这给了我以下错误:
方法调用失败,因为Deserialized.System.__ComObject#{790c6e0b-9194-4cc9-9426-a48a63185696}不包含名为“GetCollection”的方法。
我还尝试将这样的命令组合起来:
$command1 = {
New-Object -Com "ComAdmin.ComAdminCatalog" |
.GetCollection("Applications")
}
$applications = Invoke-Command -Session $session -ScriptBlock $command1在这里,我得到以下错误:
术语“.GetCollection”不能识别为cmdlet、函数、脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后再试一次。
我遗漏了什么??
发布于 2018-10-26 14:55:29
将服务器输送到Invoke-Command中,在-scriptblock中运行完整的命令
@("chvmes01","chvmes02") | Invoke-Command -ComputerName $_ -ScriptBlock {
$comAdmin = New-Object -com ("COMAdmin.COMAdminCatalog.1")
$applications = $comAdmin.GetCollection("Applications")
$applications.Populate()
$applications | %{
write-host $_.Name
}
}发布于 2021-07-28 00:36:01
只作评论,以防万一:我需要两个级别,并为此而努力(当然,我可以用脚本来对付其他人)。
$comAdmin = New-Object -com ("COMAdmin.COMAdminCatalog.1")
$applications = $comAdmin.GetCollection("Applications")
$applications.Populate()
foreach ($AppObject in $applications) {
"`nApplication $($appObject.key) $($appObject.Name) ID: $($appObject.Value("Identity"))"
$Components = $applications.GetCollection("Components", $AppObject.Key)
$Components.populate()
$components | foreach-object {
"Component $($_.key) $($_.Name)" }
}https://stackoverflow.com/questions/53004282
复制相似问题