【发布时间】:2011-08-22 02:12:50
【问题描述】:
我是 powershell 新手,我是使用我们的一个自定义 cmdlet 解决问题。默认情况下,在 cmdlet 中引发的所有异常都具有最少的信息,没有堆栈跟踪,也没有关于链式异常的信息。有没有办法启用异常的详细输出?
【问题讨论】:
标签: powershell powershell-2.0 cmdlets cmdlet
我是 powershell 新手,我是使用我们的一个自定义 cmdlet 解决问题。默认情况下,在 cmdlet 中引发的所有异常都具有最少的信息,没有堆栈跟踪,也没有关于链式异常的信息。有没有办法启用异常的详细输出?
【问题讨论】:
标签: powershell powershell-2.0 cmdlets cmdlet
这是我从网上某人那里偷来的一个简洁的功能:)。我在我的个人资料中有它,并且很乐意进一步传播它:
#Get detailed information on an error
function Resolve-Error ($ErrorRecord=$Error[0])
{
$ErrorRecord | Format-List * -Force
$ErrorRecord.InvocationInfo |Format-List *
$Exception = $ErrorRecord.Exception
for ($i = 0; $Exception; $i++, ($Exception = $Exception.InnerException))
{ "$i" * 80
$Exception |Format-List * -Force
}
}
【讨论】:
"$i" * 80 行是做什么的吗?当我调用这个函数时,我得到一个异常:Missing function body in function declaration
"$i" * 80 似乎只是一种格式,用于分隔异常。但是missing function body有点奇怪;这是最近的错误,所以函数做了它应该做的。
$ErrorRecord=$Error[0]并在函数体内用$Error[0]替换了$ErrorRecord,一切正常。
$ErrorRecord=$Error[0] 行是将错误隔离到用户变量中,然后另一个错误将当前的$Error[0] 推到$Error[1],或其他地方向下“行"。
$ErrorRecord=$Error[0] 是默认值,因此在没有参数的情况下,您仍然可以在函数中使用有效值。
我已经使用这种技术来获取嵌套的错误对象:
$error[0]|format-list -force
【讨论】:
$error 集合包含当前会话中抛出的所有未处理异常的实时列表。最后一个例外是 $error[0]。做这样的事情以尽快捕获错误的好技术:
ps> invoke-something
error: ...
ps> $e = $error[0]
使用 get-member 探索 $e。
【讨论】: