2011-05-10 55 views
3

我是新来的powershell和解决我们的一个自定义cmdlet的问题。默认情况下,在cmdlet中引发的所有异常都具有最少信息,没有堆栈跟踪,链接异常也没有信息。有没有办法启用详细的异常输出?PowerShell详细输出连锁例外

回答

2

下面是我从别人的净:)被盗整齐的功能。我有它在我的个人资料,并将愉快地传播它进一步:

#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 
    } 
} 
+1

谢谢,在这里找到原始博客:http://blogs.msdn.com/b/powershell/archive/2006/12/07/resolve-error.aspx。你知道'$ i“* 80'行吗?当我调用这个函数时,我也得到一个异常:'函数声明中缺少函数体' – kateroh 2011-05-10 19:10:50

+0

感谢您为我找到原文。 '“$ i”* 80'似乎仅仅是一种格式,可以将例外分开。但是“失踪的功能体”有点奇怪,这是最近的错误,尽管如此,函数做它应该。 – 2011-05-11 05:59:45

+0

我删除了函数体内函数参数'$ ErrorRecord = $ Error [0]',并用'$ Error [0]'替换了'$ ErrorRecord',一切正常。 – kateroh 2011-05-11 17:50:01

4

$ error集合包含当前会话中抛出的所有未处理异常的实时列表。最后一个例外是$ error [0]。一个很好的技术来做这样的事情,尽快捕获错误:

ps> invoke-something 
error: ... 
ps> $e = $error[0] 

探索$ e与获得成员。

2

我已经使用这种技术来获取嵌套错误对象:

$error[0]|format-list -force 
+0

别人理解,错误记录有默认格式的红色消息,你看到的错误发生时。你需要把它变成别的东西来看一切。 – JasonMArcher 2011-05-10 06:30:19