我是PowerShell的新手。我遇到的一个问题是,当我对数百台服务器运行脚本时,其中一些服务器在PowerShell命令行中显示RPC不可用。
例如,如果我运行脚本:
$list = Get-Content "C:\Users\hostnames.txt"
foreach ($computer in $list) {
Try {
gwmi win32_networkadapterconfiguration -computername $computer -filter "ipenabled = 'true'" | select dnshostname,ipaddress,defaultipgateway,dnsserversearchorder,winsprimaryserver,winssecondaryserver | ft -property * -autosize | out-string -Width 4096 >>dnschgchecks.txt
}
Catch {
"$computer.name failed" >>dnschgchecks.txt
}
}
某些主机在命令行中报告以下内容:
gwmi:RPC服务器不可用。 (HRESULT的例外情况: 0x800706BA)在C:\ Users \ dnschgchecks.ps1:4 char:1 + gwmi win32_networkadapterconfiguration -computername $ computer -filter" ipenable ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [Get-WmiObject],COMException + FullyQualifiedErrorId:GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
问题是,我无法分辨哪些主机无法完成数百台主机中的gwmi命令。我不想检查日志中缺少的条目以找出哪些条目。那么,我怎么知道哪些主机失败了?我想我的选择是
我使用PowerShell 2/4作为脚本。
答案 0 :(得分:1)
在您的主gwmi命令之后,添加-erroraction stop
以强制终止错误,这将触发您的catch{}
阻止。
您可能还希望先对服务器运行test-connection
,如果成功,请继续执行WMI命令。
$list = Get-Content "C:\Users\hostnames.txt"
foreach ($computer in $list) {
Try {
gwmi win32_networkadapterconfiguration -computername $computer -filter "ipenabled = 'true'" -erroraction stop | select dnshostname,ipaddress,defaultipgateway,dnsserversearchorder,winsprimaryserver,winssecondaryserver | ft -property * -autosize | out-string -Width 4096 >>dnschgchecks.txt
}
Catch {
"$computer.name failed" >>dnschgchecks.txt
}
}