Powershell versuchen / fangen / endlich
Ich schrieb kürzlich ein Powershell-Skript, funktioniert Super - Allerdings möchte ich nun aktualisieren Sie das Skript und fügen Sie einige Fehler überprüfung /Behandlung -, Aber ich war ratlos an der ersten Hürde wie es scheint. Warum nicht den folgenden code zu arbeiten?
try {
Remove-Item "C:\somenonexistentfolder\file.txt" -ErrorAction Stop
}
catch [System.Management.Automation.ItemNotFoundException] {
"item not found"
}
catch {
"any other undefined errors"
$error[0]
}
finally {
"Finished"
}
Wird der Fehler gefangen in den zweiten catch-block - Sie können finden Sie in der Ausgabe von $error[0]
. Offensichtlich würde ich mag, um es zu fangen in der ersten block - Was bin ich? Dank
InformationsquelleAutor der Frage steve | 2011-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
-ErrorAction Stop
ist, Dinge zu verändern für Sie. Versuchen Sie dieses und sehen, was Sie bekommen:InformationsquelleAutor der Antwort Bruce
Dass ist sehr merkwürdig.
Ging ich durch
ItemNotFoundException
's base Klassen getestet und die folgenden mehrerecatch
es zu sehen, was würde fangen:Wie sich herausstellt, wurde die Ausgabe
'RuntimeException'
. Ich habe auch versucht es mit einer anderen AusnahmeCommandNotFoundException
:Ausgabe
'CommandNotFoundException'
richtig.Ich erinnere mich vage zu Lesen, die anderswo (obwohl ich nicht finden konnte, es wieder) Probleme mit diesem. In solchen Fällen, in denen Ausnahme-Filterung funktionierte nicht richtig, Sie fangen würde, die nächsten
Type
Sie konnten, und verwenden Sie dann eineswitch
. Die folgenden nur die FängeException
stattRuntimeException
, aber ist dasswitch
äquivalent zu meinem ersten Beispiel, der prüft alle Basistypen vonItemNotFoundException
:Dieser schreibt
'ItemNotFound'
, wie es sollte.InformationsquelleAutor der Antwort Joel B Fant