2010-03-11 28 views
5

tôi muốn làm một cái gì đó như thế này ...PowerShell chụp gọi stack sau khi một lỗi được ném

try 
{ 
    # Something in this function throws an exception 
    Backup-Server ... 
}catch 
{ 
    # Capture stack trace of where the error was thrown from 
    Log-Error $error 
} 

Lý tưởng nhất là tôi muốn nắm bắt được đối số cho các chức năng và dòng số vv (như bạn thấy trong get-pscallstack)
EDIT: Để làm rõ, đó là dấu vết ngăn xếp PowerShell tôi muốn không một. NET
Bất kỳ ý tưởng làm thế nào để đạt được điều này?
Dave

Trả lời

8

Các lỗi cuối cùng được ngồi trong:

$error[0] 

Rất nhiều thông tin tốt trong đó để bạn có thể đuổi xuống bao gồm ngoại lệ stack dấu vết. Đây là một handly chút kịch bản (Resolve-ErrorRecord mà tàu với PSCX) cho thấy rất nhiều thông tin tốt về lỗi lần cuối:

param(
    [Parameter(Position=0, ValueFromPipeline=$true)] 
    [ValidateNotNull()] 
    [System.Management.Automation.ErrorRecord[]] 
    $ErrorRecord 
) 
process { 

     if (!$ErrorRecord) 
     { 
      if ($global:Error.Count -eq 0) 
      { 
       Write-Host "The `$Error collection is empty." 
       return 
      } 
      else 
      { 
       $ErrorRecord = @($global:Error[0]) 
      } 
     } 
     foreach ($record in $ErrorRecord) 
     { 
      $record | Format-List * -Force 
      $record.InvocationInfo | Format-List * 
      $Exception = $record.Exception 
      for ($i = 0; $Exception; $i++, ($Exception = $Exception.InnerException)) 
      { 
       "$i" * 80 
       $Exception | Format-List * -Force 
      } 
     } 

} 
+0

Cảm ơn, đó là khá nhiều những gì tôi đang tìm kiếm, hóa ra đó là nhiều hơn hoặc ít hơn những gì tôi đang xem nhưng loại lỗi tôi đã ném là che khuất thông tin tôi cần –

1

Bạn không cần càng nhiều mã như câu trả lời của Keith.

$error[0].ErrorRecord.ScriptStackTrace 

là những gì bạn muốn.

Các vấn đề liên quan