用于测试与服务器的远程连接的 PowerShell 脚本
PowerShell script to test remote connections to a server
我是 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 : The RPC server is unavailable. (Exception from HRESULT:
0x800706BA) At 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 连接,但如何?
我正在为脚本使用 PowerShell 2 / 4。
在您的主要 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
}
}
我是 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 : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) At 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 连接,但如何?
我正在为脚本使用 PowerShell 2 / 4。
在您的主要 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
}
}