Powershell: Catch exception geworfen, wenn Sie nicht in der Lage einen Dienst zu starten
Scheine ich nicht in der Lage zu fangen Sie eine Ausnahme, die ausgelöst durch Start-Service
. Hier ist mein code:
try
{
start-service "SomeUnStartableService"
}
catch [Microsoft.PowerShell.Commands.ServiceCommandException]
{
write-host "got here"
}
Wenn ich diese ausführe, wird die Ausnahme geworfen, aber nicht gefangen:
*Service 'SomeUnStartableService' start failed.
At line:3 char:18
+ start-service <<<< "SomeUnStartableService"
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException
+ FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand*
$ErrorActionPreference
Stop gesetzt wird, also das sollte nicht das problem sein.
Wenn ich mein alter code catch [Exception]
die Ausnahme abgefangen und "hierher gekommen" ist gedruckt.
Tut start-service
werfen ServiceCommandException
oder etwas anderes? Es sieht aus, als wenn es ist, aber ich kann es nicht fassen!
--- Edit ---
Idealerweise konnte ich das folgende schreiben, und wirft eine Ausnahme, wenn start-service
nicht werfen eine Ausnahme, und nur fangen Sie eine Ausnahme, die ausgelöst durch start-service
:
try
{
start-service "SomeUnStartableService"
throw (new-object Exception("service started when expected not to start"))
}
catch [Microsoft.PowerShell.Commands.ServiceCommandException]
{
write-host "got here"
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich in der Regel don ' T beschränken Sie die catch-phrase, sondern die Ausnahmen behandeln, die mit logischen tests innerhalb der catch-block:
Vielleicht nicht so sauber und kann in großen catch-Blöcke. Aber wenn es funktioniert... 😉
Try/Catch funktioniert nur auf Fehler mit Abbruch. Verwenden Sie die ErrorAction-parameter mit dem Wert Stop, um die Fehlermeldung bei einem Fehler mit Abbruch, und dann werden Sie in der Lage, es zu fangen:
UPDATE:
Wenn man $ErrorActionPreference auf 'stop' - (oder nutzen -ErrorAction Stop) die Art des Fehlers erhalten Sie ActionPreferenceStopException, so können Sie es verwenden, um den Fehler abzufangen.
}
Entdecken Sie Ihr Ausnahme, die Sie verwenden können :
Bearbeitet werden : Hier ist eine Art bypass mit
SystemException