2010-03-11 8 views
5

Je veux faire quelque chose comme ça ...capture powershell pile d'appel après une erreur est renvoyée

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

Idéalement je voudrais saisir des arguments aux numéros de fonction et ligne etc. (comme vous voyez dans get-pscallstack)
EDIT: Pour clarifier, c'est la trace de pile powershell je ne veux pas le .NET un
Des idées comment y parvenir?
Dave

Répondre

8

La dernière erreur est assis dans:

$error[0] 

Beaucoup de bonnes infos là-bas pour vous pourchasser, y compris les traces de pile d'exception. Ceci est un petit script handly (Resolve-ErrorRecord livré avec PSCX) qui montre beaucoup de bonnes informations sur la dernière erreur:

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

Merci, c'est à peu près ce que je cherchais, il s'est avéré que c'était plus ou moins ce que je regardais mais le type d'erreur que je jetais obscurcissait l'info dont j'avais besoin –

1

Vous ne codent pas besoin d'autant que la réponse de Keith.

$error[0].ErrorRecord.ScriptStackTrace 

est ce que vous voulez.