【问题标题】:PowerShell script to test remote connections to a server用于测试与服务器的远程连接的 PowerShell 脚本
【发布时间】:2015-12-18 21:25:30
【问题描述】:

我是 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 字符:1 + gwmi win32_networkadapterconfiguration -computername $computer -filter "ipenable ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Get-WmiObject], COMException + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

问题是,我无法从数百个主机中分辨出哪些主机未能完成 gwmi 命令。我不想检查日志以找出丢失的条目。那么,如何判断哪些主机失败了?我想我的选择是

  • 以某种方式修改脚本?
  • 首先使用另一个脚本测试 PowerShell 连接,但如何?

我正在为脚本使用 PowerShell 2 / 4。

【问题讨论】:

    标签: powershell connection rpc connectivity


    【解决方案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
             }
                                    }
    

    【讨论】:

    • 太好了,谢谢。我现在可以在日志文件中轻松判断哪些主机失败了,而且该失败不再在命令行上报告为错误。 catch 块按应有的方式触发。
    • 关于测试连接方法的重要提示。有时由于简单的连接问题,Get-WmiObject 调用需要半分钟(甚至更长时间)才能失败,因此首先运行 ping 测试确实加快了进程
    猜你喜欢
    • 2020-02-11
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多