2011-05-10 40 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