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-String
um 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-Error
stattdessen:
trap {
Write-Error $Error[0]
Read-Host "Press enter"
}