You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell捕获异常后如何保留原错误信息并自定义退出码?

解决方案

以下是几种可行的替代方案:

方案1:重新抛出异常并设置退出码

通过[Environment]::ExitCode设置自定义退出码,再重新抛出原始异常,既能保留完整错误信息,又能指定退出码:

[CmdletBinding()]
param()

process {
    try {
        1/0
    } catch {
        [Environment]::ExitCode = 99
        throw
    }
}

抛出的异常会保留原始错误的行号、代码行等所有细节,同时进程退出码会被设置为99。

方案2:使用Write-Error的-ErrorRecord参数

直接传递捕获到的原始错误记录给Write-Error,可以保留错误的完整上下文信息:

[CmdletBinding()]
param()

process {
    try {
        1/0
    } catch {
        Write-Error -ErrorRecord $_
        exit 99
    }
}

这种方式输出的错误信息和直接运行脚本时的格式一致,包含原始行号与代码行,之后脚本以指定的退出码99结束。

方案3:利用$PSCmdlet.WriteError()方法

在高级函数/脚本中,使用PowerShell的底层错误写入方法,更精准地保留原始错误信息:

[CmdletBinding()]
param()

process {
    try {
        1/0
    } catch {
        $PSCmdlet.WriteError($_)
        exit 99
    }
}

$PSCmdlet.WriteError()会直接将原始错误记录写入错误流,完整保留所有错误细节,同时配合exit设置自定义退出码。


内容的提问来源于stack exchange,提问作者Peyre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:50:19