如何从 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 块中重新引发异常?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Publish-Module中捕获异常?

从 catch 块访问 vuex 存储

std :: current_exception应该从类的析构函数中的catch块返回非null值

Powershell 如何获取异常的名称

Powershell - 如何为 Start-Job 预先评估脚本块中的变量

用powershell的try catch, 为啥try里面出现异常,catch 捕获不到呢?