尝试捕捉不会捕捉

Mod*_*dro 1 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"}
}
Run Code Online (Sandbox Code Playgroud)

The*_*le1 7

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

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

  • 如果您希望脚本中抛出的每个错误都触发 `try/catch` 块,您还可以在脚本顶部指定 `$ErrorActionPreference='STOP'`。 (2认同)