2017-04-06 3 views
1

Ich versuche, etwas ähnliches zu schreiben:Wie lässt Powershell eine in einer Funktion generierte Ausnahme auslösen?

function Do-Something() { 
    Write-Host "Starting something" 
    Do-SomethingWhichThrowsAnException 
    Write-Host "Something completed successfully" 
} 

... 

function Process-Thing() { 
    try { 
    Do-OneThing 
    Do-TwoThing 
    Do-Something 
    Do-SomethingElse 
    } 
    catch { 
    Write-Host "Exception Caught!" 
    } 
} 

Und ich bekomme die folgende Ausgabe: „Exception abgefangen“

Starting something 
{massive red exception text} 
Something completed successfully 

Warum ich nicht?

Warum sehe ich "Etwas erfolgreich abgeschlossen"?

Macht Powershell einfach nicht werfen Ausnahmen den Stapel oder etwas?

Wenn ja, ist es möglich, es in Vorlage zu schlagen? Muss ich in jeder meiner Do-XXXthing Funktionen versuchen/fangen? diese

+2

'$ ErrorActionPreference' – PetSerAl

+0

Ich sehe Sie nicht, dass Sie die' Process-Thing' Funktion ausgeführt haben. Die Funktion aufrufen. Es fängt den Fehler auf. Wenn Sie möchten, kann ich den Screenshot teilen und sicherstellen, dass die Voreinstellung für die Fehleraktion überprüft wird –

Antwort

1

prüfen article:

Also, wenn ich alle Fehler fangen wollen, die auftreten, werde ich eine [System.Exception] fangen, weil, dass die Wurzel aller Fehler ist. Hier wird der Catch-Block Ich benutze:

Fang [System.Exception] { „Caught die Ausnahme“}

Das nächste, was zu erkennen ist, dass, wenn ich etwas versuchen, und es ist kein Fehler mit Abbruch zu erzeugen, es wird sich sowieso nicht in den Catch-Block bewegen. Dies liegt daran, dass der Standard für $ ErrorActionPreference (was Windows PowerShell bei Auftreten eines Fehlers tut) mit dem nächsten Befehl fortgesetzt wird.

In der Realität bedeutet dies, dass bei einem Fehler, der von Windows PowerShell behoben werden kann, versucht wird, den nächsten Befehl auszuführen. Sie werden jedoch über den aufgetretenen Fehler informiert, indem Sie den Fehler in der Konsole anzeigen.

Wenn ich will, um zu sehen, was Windows Powershell tun wird, wenn ein Fehler ohne Abbruch entsteht, sehe ich den Wert des $ ErrorActionPreference Variable, zum Beispiel:

PS C:> $ ErrorActionPreference

Weiter

...

Also, ich, was Sie sollten den Wert von $ErrorActionPreference zu Stop ändern. Überprüfen Sie die Antwort dieser link darüber, wie dies in einem Skript zu tun.

Verwandte Themen