Powershell - Wie kann ich vollständige Fehlerinformationen in eine Trap kopieren

Powershell - Wie kann ich vollständige Fehlerinformationen in eine Trap kopieren

Ich verwende die Trap-Funktion von Powershell, weil ich vollständige Fehlerinformationen ausgeben möchte, wenn ein Fehler auftritt und ich auf den Fehler antworten muss. Ohne die Verwendung eines Traps zeigt mir Powershell die Fehlerinformationen erst nach dem Fehler an (und unabhängig von der Inquire-Eingabeaufforderung, auf die ich geantwortet habe).

Das Problem bei der Verwendung der Trap-Funktion besteht darin, dass ich zwar die vollständigen Informationen ausdrucken kann, aber $error[0]nicht weiß, wie ich sie in einen String kopieren und die vollständigen Informationen erhalten kann. Stattdessen erhalte ich nur die Kurzinformationen.

Dies zeigt beispielsweise die vollständigen Informationen:

$ErrorActionPreference = "Stop"
trap {$error[0]; Read-Host -Prompt "Trapped. Press Enter to exit"}
Split-Path -BAD
echo "Running script"
Read-Host -Prompt "Press Enter to exit"

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

Trapped. Press Enter to exit: 

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParentContainsErrorRecordExce 
   ption
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

Wenn ich jedoch versuche, $error[0] von Write-Host zu verwenden, werden nur die kurzen Fehlerinformationen angezeigt:

$ErrorActionPreference = "Stop"
trap {Write-Host -ForegroundColor Red -BackgroundColor Black "$($error[0])"; Read-Host -Prompt "Trapped. Press Enter to exit"}
Split-Path -BAD
echo "Running script"
Read-Host -Prompt "Press Enter to exit"

A parameter cannot be found that matches parameter name 'BAD'.
Trapped. Press Enter to exit: 

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParentContainsErrorRecordExce 
   ption
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

Ich möchte die vollständigen Fehlerinformationen aus der Trap in Farbe anzeigen, weshalb ich Write-Host benötige.

Antwort1

Wenn Sie $Error[0]innerhalb einer Zeichenfolge verwenden, ToString()wird implizit aufgerufen und gibt nur die Fehlerzeichenfolge zurück. Verwenden Sie, Out-Stringum die vollständige Fehlerausgabe zu erhalten:

trap {
    Write-Host -ForegroundColor Red -BackgroundColor Black "$($Error[0] | Out-String)"
    Read-Host "Press enter"

}

oder verwenden Sie Write-Errorstattdessen:

trap {
    Write-Error $Error[0]
    Read-Host "Press enter"

}

verwandte Informationen