我正在用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语句,我只是想弄清楚我可以运行的任何查询,以确定我是否可以正确连接到该服务器并获得返回的结果。可以告诉我是否继续。
答案 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
}
这给了我我想要的东西!