给出:PowerShell 5.1
阵列中的某些计算机出现“访问被拒绝”的情况。如何使任何错误通过未运行的条件的“else”部分运行?现在,它只是抛出整个错误消息,我不希望用户看到所有这些。
Invoke-Command -ComputerName $computers {
$rstest = Get-Service -Name MyService1
if ($rstest.Status -eq 'Running') {
"Service $($rstest.Name) is running"
}
else{
"Service $($rstest.Name) is NOT running"
}
}
“访问被拒绝”错误不是由于
Get-Service
引起的,如果该服务不存在,您将收到不同的错误,即:“无法找到任何具有服务名称的服务...”。这是因为您无法连接到远程计算机,要么是由于缺乏权限,要么是服务器没有启用 PSRemoting。
处理此问题的最简单方法可能是在
-ErrorAction SilentlyContinue
语句上使用 Invoke-Command
与 -ErrorVariable
一起使用,然后检查错误变量是否已填充:
Invoke-Command -ComputerName $computers {
$rstest = Get-Service -Name MyService1
if ($rstest.Status -eq 'Running') {
"Service $($rstest.Name) is running"
}
else {
"Service $($rstest.Name) is NOT running"
}
} -ErrorAction SilentlyContinue -ErrorVariable errors
if ($errors) {
# here you can find the computers that you couldn't connect to
$errors.TargetObject
}