尝试,捕获似乎不起作用

时间:2013-10-23 12:58:32

标签: powershell powershell-v3.0

我有以下代码,我认为这可以让我捕获错误,而不是生成错误写出“发生错误”。

不幸的是,它仍然显示错误“无法重新启动计算机:拒绝访问”。

我知道为什么会这样,但我希望能够捕获错误并重新格式化。我做错了什么?

try {
    Restart-Computer -ComputerName MFG-KY-PC74 -Force 
} catch {
    Write-Host "An Error Occurred"
}

1 个答案:

答案 0 :(得分:11)

在PowerShell中,存在终止和非终止错误。前者终止脚本执行(如果没有捕获)并且可以被try..catch捕获,后者不会终止脚本执行(所以没有什么可以捕获的)。您收到的错误是非终止错误,因此您需要通过在语句中附加-ErrorAction Stop来使其成为终止错误:

try {
  Restart-Computer -ComputerName MFG-KY-PC74 -Force -ErrorAction Stop
} catch {
  write-host "An Error Occurred"
}

或者,如果您希望所有错误都成为终止错误,则可以设置$ErrorActionPreference = "Stop"

有关详细信息,请参阅 Scripting Guy 博客上的this article