Du bist hier weit weg von der Spur.
Sie haben bereits eine schöne, große Fehlermeldung. Warum um alles in der Welt möchten Sie Code schreiben, der $?
nach jedem einzelnen Befehl explizit überprüft wird ? Dies ist enorm umständlich und fehleranfällig. Die richtige Lösung ist , die Überprüfung zu beenden$?
.
Verwenden Sie stattdessen den in PowerShell integrierten Mechanismus, um für Sie in die Luft zu jagen. Sie aktivieren es, indem Sie die Fehlereinstellung auf die höchste Stufe setzen:
$ErrorActionPreference = 'Stop'
Ich setze dies an die Spitze jedes einzelnen Skripts, das ich jemals geschrieben habe, und jetzt muss ich es nicht mehr überprüfen $?
. Dies macht meinen Code wesentlich einfacher und zuverlässiger.
Wenn Sie auf Situationen stoßen, in denen Sie dieses Verhalten wirklich deaktivieren müssen, können Sie entweder catch
den Fehler beheben oder eine Einstellung mithilfe der allgemeinen Funktion an eine bestimmte Funktion übergeben -ErrorAction
. In Ihrem Fall möchten Sie wahrscheinlich, dass Ihr Prozess beim ersten Fehler stoppt, den Fehler abfängt und dann protokolliert.
Beachten Sie, dass dies nicht der Fall ist, wenn externe ausführbare Dateien fehlschlagen (Exit-Code ungleich Null, konventionell). Sie müssen also immer noch prüfen, $LASTEXITCODE
ob Sie welche aufrufen. Trotz dieser Einschränkung spart die Einstellung immer noch viel Code und Aufwand.
Zusätzliche Zuverlässigkeit
Möglicherweise möchten Sie auch den strengen Modus verwenden :
Set-StrictMode -Version Latest
Dies verhindert, dass PowerShell stillschweigend fortgesetzt wird, wenn Sie eine nicht vorhandene Variable verwenden und in anderen seltsamen Situationen. ( -Version
Einzelheiten zu den Einschränkungen finden Sie im Parameter.)
Durch die Kombination dieser beiden Einstellungen wird PowerShell wesentlich fehlerfreier, was die Programmierung erheblich vereinfacht.