我有几个PowerShell脚本文件。 a.ps1
“调用”(通过点运算符)b.ps1
和c.ps1
脚本。
a.ps1 #main
b.ps1 #helper1 <- need catch error there
c.ps1 #helper2 <- error is being raised there
b.ps1
文件内部是否可能捕获c.ps1
文件中引发的终止错误?谢谢。
编辑
里面
a.ps1
:. .\b.ps1
. .\c.ps1
里面
b.ps1
:trap {
Write-Host "my trap block"
}
里面
c.ps1
:throw "test"
在此示例中未调用“我的陷阱块”
最佳答案
您可以在trap
中安装b.ps1
处理程序,以处理c.ps1
中的错误(如果您对源b.ps1
加点,以便它在与a.ps1
相同的范围内运行),例如:
. .\b.ps1
更新:确实不起作用。似乎PowerShell不支持通过点源在a.ps1范围内运行的概念。不确定您是否可以做得更好:
a.ps1 contents:
---------------
. .\b.ps1
trap {
TrapHandler $_
continue
}
.\c.ps1
b.ps1 contents:
---------------
function TrapHandler($error)
{
Write-Host "oops - $error"
}
看起来陷阱处理程序需要位于a.ps1中,但是您可以在b.ps1中定义陷阱处理功能。不过,不要认为您可以在此函数中控制错误的处理(中断或继续)。
关于powershell - PowerShell:我可以捕获所有异常的单点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5077550/