用于测试与服务器的远程连接的 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 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
         }
                                }