如何从 PowerShell 中的 catch 块中重新引发异常?
Posted
技术标签:
【中文标题】如何从 PowerShell 中的 catch 块中重新引发异常?【英文标题】:How can I rethrow an exception from catch block in PowerShell? 【发布时间】:2012-12-11 12:11:13 【问题描述】:我应该以与 .NET 相同的方式处理异常吗?
那么,如何在 PowerShell 的 catch 块中重新抛出异常?
throw
够了吗?或者throw $_
会更好吗?
【问题讨论】:
【参考方案1】:如果您想重新抛出原始异常,您可以使用 throw
(最常见)、throw $_
或 throw $_.Exception
ps:catch
里面的变量$_
本身并不是异常,而是包含Exception的System.Management.Automation.ErrorRecord
注意
PowerShell 中的 throw
关键字的行为与 .NET 实现不同:在 .NET 中,您只能抛出 System.Exceptions
本身或其后继者,但在 PowerShell 中,您可以抛出任何东西,并且会自动包装到 @987654331 @。见 sn-p here。
【讨论】:
注意:在 C# 中,throw
表单保留了原始异常的上下文(源位置),但不幸的是,在 PowerShell 中似乎并非如此。
现在好像是这样!
哇哦。我想知道他们什么时候改的。 2017 年绝对没有,当时我有这个相关问题:***.com/questions/46162493
@D.R. - 他们修复它时的任何线索,或指向已解决问题的链接。只是好奇,我自己找了一下,但还没有找到。以上是关于如何从 PowerShell 中的 catch 块中重新引发异常?的主要内容,如果未能解决你的问题,请参考以下文章
std :: current_exception应该从类的析构函数中的catch块返回非null值