PowerShell中的if语句取决于RPC服务器是否不可用

时间:2019-05-09 13:48:31

标签: powershell if-statement rpc

我正在用PowerShell编写脚本,理想情况下可以从另一台服务器收集信息。如果无法访问该服务器,我想提示它让用户手动输入信息。我知道如何执行所有这些操作,但是当RPC服务器不可用时,我会挂断电话。我还要说的是,我知道如何在错误发生时进行修复,但是我不想依靠最终用户来解决此问题。

例如,如果我运行:

Get-WmiObject Win32_ComputerSystem -Computer 10.5.21.94

我得到的结果是:

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At line:1 char:1
+ Get-WmiObject Win32_ComputerSystem -Computer 10.5.21.94
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], 
COMException
+ FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我试图找到一种写if语句的方法,该语句将检查RPC服务器是否可用,但是我不确定为创建true /而检查什么。假变量。再说一次,我并不是真正地找人告诉我如何编写if语句,我只是想弄清楚我可以运行的任何查询,以确定我是否可以正确连接到该服务器并获得返回的结果。可以告诉我是否继续。

2 个答案:

答案 0 :(得分:1)

在if语句中解决它的一种简单方法是仅使用Erroraction忽略潜在的错误消息,并使用-not语句检查它是否可以到达目标,然后在变量if后面附加$ false值不能。

请参见以下示例。

$status = ""
if (!(Get-WmiObject Win32_ComputerSystem -ComputerName 10.5.21.94 -ErrorAction SilentlyContinue)) {
Write-Host "Server is unavailable!"
$status += $false 
}

    else {
    Get-WmiObject Win32_ComputerSystem -ComputerName 10.5.21.94
    }

if ($status -eq $false) {
    $Server = Read-Host "Please enter the destionation"
    Get-WmiObject Win32_ComputerSystem -ComputerName $Server
}

答案 1 :(得分:0)

有人建议使用Try / Catch块,但是由于这不是一个终止错误,因此最初没有起作用。然后我发现了这个:

Try/catch does not seem to have an effect

那里有一个关于终止所有错误的答案:

try {

   $ErrorActionPreference = "Stop"; #Make all errors terminating
   get-item filethatdoesntexist; # normally non-terminating
   write-host "You won't hit me";  
} catch{
   Write-Host "Caught the exception";
   Write-Host $Error[0].Exception;
}finally{
   $ErrorActionPreference = "Continue"; #Reset the error action pref to default

}

这给了我我想要的东西!