2011-05-10 2 views
3

Je ne connais pas PowerShell et je suis en train de résoudre un problème lié à l'un de nos cmdlets personnalisées. Par défaut, toutes les exceptions lancées dans la cmdlet ont des informations minimales, aucune trace de pile et aucune information sur les exceptions chaînées. Y a-t-il un moyen d'activer la sortie verbeuse des exceptions?Sortie verbeuse Powershell pour les exceptions chaînées

Répondre

2

est ici une fonction propre que je l'ai volé de quelqu'un sur le « :) net. Je l'ai dans mon profil et je l'étalerai avec plaisir:

#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

Merci, a trouvé le blog original ici: http://blogs.msdn.com/b/powershell/archive/2006/12/07/resolve-error.aspx. Savez-vous ce que fait la ligne "$ i" * 80'? Et aussi je reçois une exception quand j'appelle cette fonction: 'Corps de fonction manquant dans la déclaration de fonction' – kateroh

+0

Merci d'avoir trouvé l'original pour moi. '" $ i "* 80' semble simplement être un formatage, pour séparer les exceptions. Mais le «corps de fonction manquant» est un peu étrange; C'est l'erreur la plus récente si bien que la fonction fait ce qu'elle devrait faire. –

+0

J'ai supprimé le paramètre de fonction '$ ErrorRecord = $ Error [0]' et remplacé '$ ErrorRecord' par' $ Error [0] 'dans le corps de la fonction et tout a bien fonctionné. – kateroh

4

La collection $ error contient une liste en direct de toutes les exceptions non gérées levées dans la session en cours. La dernière exception est à $ error [0]. Une bonne technique pour faire quelque chose comme ceci pour capturer l'erreur dès que possible:

Explorez $ e avec get-member.

2

Je l'ai utilisé cette technique pour obtenir des objets d'erreur imbriqués:

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

Quelque chose d'autre à comprendre, les enregistrements d'erreur ont une mise en forme par défaut du message rouge que vous voyez lorsque l'erreur se produit. Vous devez le transformer en quelque chose d'autre pour tout voir. – JasonMArcher