我怎样才能让抛出的错误通过我的条件的其他部分?

问题描述 投票:0回答:1

给出: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"
    }
} 
powershell powershell-remoting
1个回答
0
投票

“访问被拒绝”错误不是由于

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
}
© www.soinside.com 2019 - 2024. All rights reserved.