Powershell中未处理异常的默认行为

Powershell中未处理异常的默认行为,powershell,error-handling,Powershell,Error Handling,这可能不是这个请求的最佳标题 我知道我可以将Powershell代码包装在try…catch块中。我还知道我可以设置$ErrorActionPreference变量 但是,我不希望将整个脚本包装在一个大的Try…Catch块中,而是希望有一些默认代码在发生未处理的异常时运行 例如,假设发生了一些未被try…catch捕获的意外错误。我希望PowerShell在退出之前(假设ErrorActionPreference为STOP)运行特定的代码块,以便记录或报告意外错误 有办法吗?通常使用try…c

这可能不是这个请求的最佳标题

我知道我可以将Powershell代码包装在
try…catch
块中。我还知道我可以设置
$ErrorActionPreference
变量

但是,我不希望将整个脚本包装在一个大的
Try…Catch
块中,而是希望有一些默认代码在发生未处理的异常时运行

例如,假设发生了一些未被
try…catch
捕获的意外错误。我希望PowerShell在退出之前(假设ErrorActionPreference为STOP)运行特定的代码块,以便记录或报告意外错误


有办法吗?

通常使用
try…catch…finally
块的
finally
部分来实现此目的

try {
    # do some stuff
}
catch {
    # do some stuff on exception
}
finally {
    # do some stuff regardless of whether we caught an exception
}
您也可以只使用
try
finally
而不使用
catch
这个“好”方法是使用
try..catch
块来处理它。它们主要用于针对代码的特定部分,并提供有针对性的异常处理。如果你需要更“全球化”的东西,你可能想用一句话:

function TrapTest {
    trap {"Error found."}
    ...code

    CauseErrorHere

    ....code
}

陷阱适用于整个范围(例如函数、脚本等),并在发生异常时运行。这允许您记录错误,并且如果需要,还允许在异常发生后继续执行。

是的,
trap
语句。真不敢相信我竟然忘记了
trap
语句。谢谢