尝试捕捉不会捕捉

时间:2019-06-24 13:59:38

标签: powershell try-catch

当我使用try{} catch{} ping这些服务器时,我只收到一个cmdlet错误,而不是try-catch中的catch ...这里是什么问题?

foreach($s in $servers)
{
    try{Test-Connection $s.server -Count 1}
    catch{ Write-Host "error"}
}

3 个答案:

答案 0 :(得分:7)

默认情况下,cmdlet会引发try / catch无法处理的非脚本终止错误。您可以使用$ErrorActionPreference自动变量或-ErrorAction通用参数来更改此行为:

# or `$ErrorActionPreference = 'Stop'`
foreach ($s in $servers) {
    try {
        Test-Connection -TargetName $s.server -Count 1 -ErrorAction Stop
    }
    catch {
        "$_"
    }
}

答案 1 :(得分:3)

出现问题时,

测试连接不提供“ 终止错误”。这意味着不会触发try / catch。您可以通过在-ErrorAction Stop命令中添加Test-Connection来解决此问题。

foreach($s in $servers)
{
    try{
        Test-Connection $s.server -Count 1 -ErrorAction Stop
    }catch{
        "error"
    }
}

答案 2 :(得分:-2)

请检查输入文件中的标题名称。 试试{Test-Connection $ s.server -Count 1}