$ Error变量是$ Null但$ _包含Catch中的错误

JNK*_*JNK 7 error-handling powershell

我有PS模块,其中包含许多用于单个功能的脚本.还有一个"库"脚本,其中包含许多辅助函数,这些函数可由模块中使用的函数调用.

我们调用外部函数ReadWeb,它使用辅助函数ParseXML.

本周我遇到了一个问题,内部帮助ParseXML函数中有错误处理.该函数包含一个try/catch,并在catch中查询:

$Error[0].Exception.InnerException.Message

...为了将错误作为变量传递回外部作用域并确定是否ParseXML有效.

对于特定情况,我在调用时遇到索引错误ReadWeb.根本原因结果$ErrorCatch块中的对象ParseXML回来了$Null.

我改变了错误处理来检查$Error -eq $Null,如果是,应使用$_Catch确定该错误信息是什么.

我的问题是:什么原因$Error$null里面的Catch

Mat*_*t M 0

编辑:基于 Powershell 3 的答案。

\n

$error是由 Powershell 处理的自动变量:about_Try_Catch_Finally中详细描述的第 3 个 \xc2\xa7 。

\n

它被视为 Catch 块的上下文,因此可用作$_。\n由于 Catch 块与 Try 是不同的块,因此$error自动变量将被重置并被赋值$null

\n