我正在尝试写一些类似的东西:
function Do-Something () {
Write-Host "Starting something"
Do-SomethingWhichThrowsAnException
Write-Host "Something completed successfully"
}
...
function Process-Thing () {
try {
Do-OneThing
Do-TwoThing
Do-Something
Do-SomethingElse
}
catch {
Write-Host "Exception Caught!"
}
}
我得到以下输出:
Starting something
{massive red exception text}
Something completed successfully
为什么我看不到"异常被捕?"?
为什么我会看到"某些事情已成功完成"?
Powershell只是不在堆栈中抛出异常还是什么?
如果是这样,是否有可能将其提交?我是否必须尝试/捕获我的Do-XXXthing
函数中的每一个?
答案 0 :(得分:1)
检查article:
因此,如果我想捕获所有发生的错误,我将捕获[System.Exception],因为这是所有错误的根源。这是我使用的Catch块:
Catch [System.Exception] {"抓住异常"}
接下来要认识到的是,如果我尝试了某些东西,并且它不会产生终止错误,那么无论如何它都不会进入Catch块。这是因为$ ErrorActionPreference的默认值(Windows PowerShell在出现错误时将执行的操作)是继续执行下一个命令。
实际上,这意味着如果发生错误并且Windows PowerShell可以从中恢复,它将尝试执行下一个命令。但它会通过向控制台显示错误让您知道发生的错误。
如果我想看看Windows PowerShell在出现非终止错误时会做什么,我会查看$ ErrorActionPreference变量的值,例如:
PS C:> $ ErrorActionPreference
继续
...
所以,我认为您应该将$ErrorActionPreference
的值更改为Stop
。检查此link的答案,了解如何在脚本中执行此操作。