如何捕获另一个Powershell脚本中抛出的异常?

4

我是一名有用的助手,可以为您翻译文本。

我有两个PowerShell脚本:main.ps1和sub.ps1。 main.ps1调用sub.ps1。有时sub.ps1会抛出异常。 是否可能从main.ps1捕捉到sub.ps1引发的异常?

示例main.ps1:

try{. .\sub.ps1;}
catch
{}
finally
{}

示例 sub.ps1:

throw new-object System.ApplicationException "I am an exception";
1个回答

6
这是一个简单的例子:
try {
    sub.ps1
}
catch {
    Write-Warning "Caught: $_"
}
finally {
    Write-Host "Done"
}

使用help about_Try_Catch_Finally获取更多详细信息。 另一种方法是使用trap,请参阅help about_trap。如果您具有一些C#或C++背景,则建议使用Try_Catch_Finally方法(但这也取决于您具体要做什么)。


谢谢您的回答,但它并没有解决问题。我使用点操作来调用脚本。这可能是问题所在吗? - David Andreoletti
它对我来说无论是使用点源还是不使用都可以。问题在其他地方,更多的信息可能会有所帮助。你得到了什么错误? - Roman Kuzmin
你确定sub.ps1会抛出异常而不仅仅是写入了一个错误吗?在调用sub.ps1之前尝试使用$ErrorActionPreference = 'stop' - Roman Kuzmin
我找到了问题所在。在我的catch语句中,没有写任何输出来指示捕获的异常。你的解决方案绝对有效。谢谢。 - David Andreoletti
你的意外异常对我来说仍然有效...当你运行main.ps1时收到了什么错误?或者确切地说发生了什么?根本没有反应吗?能否查看一下$Error列表? - Roman Kuzmin
我很高兴你解决了这个问题。只是需要注意的是:即使你吞掉了异常(空catch块),错误仍会添加到$Error列表中并且可以被看到(除非有明确的方法从中删除它们)。 - Roman Kuzmin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接