用于测试与服务器的远程连接的PowerShell脚本

时间:2015-12-18 21:25:31

标签: powershell connection rpc connectivity

我是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连接,但是如何?

我使用PowerShell 2/4作为脚本。

1 个答案:

答案 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
         }
                                }