PowerShell – beenden der Ausführung von Scripten

Nicht nur im Falle der Windows PowerShell, führen in der Anwendungsentwicklung zahlreiche Wege nach Rom resp. zur Umsetzung einer beliebigen Anforderung. 

Bei der Entwicklung einer Anwendung kann es zahlreiche Gründe (und Möglichkeiten) geben, weshalb die Ausführung des Codes unterbrochen oder übersprungen werden muss. Um dies zu erreichen ist es notwendig den Begriff „Scope“ oder zu deutsch „Sichtbarkeitsbereich“ oder auch „Gültigkeitsbereich“ zu verstehen.

Scopes / Sichtbarkeistbereiche in der WPS

Warum spielen ausgerechnet die sog. Sichtbarkeits-/Gültigkeitsbereiche eine Rolle, wenn die z.B. die Ausführung eines PowerShell Skripts unterbrochen werden soll?

Nun, die Powershell kennt verschiedene Kommandos und Funktionen bzw. Methoden die eine Unterbrechung des Programmablaufs zur Folge haben. Dies hat den Hintergrund, dass beispielsweise eine Schleife oder eine Funktion einen eigenen Gültigkeitsbereich definieren, sozusagen eine abgeschlossene Kontrollstruktur mit eigenen Datenobjekten und beschränkter Sichtbarkeit dieser Daten von ausserhalb des Gültigkeitsbereichs der Kontrollstruktur. Wird z.B eine Variable innerhalb einer Funktion definiert, so ist diese Variable auch zunächst nur innerhalb der Funktion sichtbar bzw. existent.

Auch die PowerShell Konsole selbst stellt einen eigenen Host mit eigenem Scope dar. Würden wir ein Kommando wie exit direkt in der Konsole eingeben, würde das zum Beenden der Konsole führen. 

Im Folgenden lernst du die zentralen Kommandos zur Codeunterbrechung kennenlernen.

Der ‚Exit‘ Befehl

#### some commands -> will be executed ####

function doSomething (){
#### some commands -> will be executed ####
exit
#### more commands -> will never be executed ####
}

#### commands outside of the function -> will never be executed ####

Der Exit Befehl bezieht sich auf den Kontext in dem der Code ausgeführt wird. Wird der Befehl beispielsweise in einem Skript ausgeführt, das in der Konsole aufgerufen wird, wird die Ausführung des Skriptes beendet und die Konsole ebenfalls geschlossen, da Skript und Konsole beide im Kontext der Konsole laufen!

Anders sieht es aus, wenn du exit in einer Funktion verwendest. Wird die Funktion im selben Skript definiert in dem sie dann aufgerufen wird, beendet das exit-Kommando nur die Ausführung der Funktion und des Skriptes selbst. Die Funktion läuft im Kontext des Skriptes und exit bezieht sich auf diesen Kontext. 

Der ‚Break‘ Befehl

foreach ($item in $items){
#### some commands -> will be executed once ####
break
#### some commands -> will never be executed ####
}

#### some commands -> will be executed ####

Das break Kommando wird speziell in Kontrollstrukturen wie Schleifen, ‚Switch‘-Blöcken etc. verwendet. Der Aufruf des Kommandos bewirkt stets den Abbruch der Kontrollstruktur, so wird beispielsweise eine Schleife mit 100 Durchläufen sofort beendet, wenn der Befehl kommt, auch wenn die 100 Durchläufe noch nicht erfolgt sind.

Ausserhalb des Einsatzes in der klassischen Kontrollstruktur, beispielsweise direkt in einem Skript oder sogar innerhalb einer Funktion ist natürlich auch möglich. Der Einsatz führt hier wiederum zum Abbruch des Skripts, jedoch ohne die Konsole zu schliessen.

Der ‚Return‘ Befehl

Return kann als ein abgeschwächtes break betrachtet werden. 1Beim Einsatz von Kontrollstrukturen wie Schleifen, wird nur der aktuelle Schleifendurchlauf übersprungen, nicht jedoch die weitere Ausführung der Schleife.

Fazit

Es wichtig zu verstehen in welchem Kontext welcher Befehl eingesetzt werden kann und natürlich welche Auswirkungen er im entsprechenden Kontext hat. 

Hier ist zu empfehlen einfach ein wenig herumzuspielen um ein Gefühl dafür zu bekommen. Auch hier gilt der alte Grundsatz:

„Programmieren lernst du nur durch programmieren!“

Letztlich bleibt nur noch zu beachten, dass ein weiterer Bereich in dem die Unterbrechung oder das Überspringen von Codeblöcken eine Rolle spielt, nämlich die Ausnahme-Behandlung, ebenfalls nicht ausser Acht gelassen werden sollte. Einer der folgenden Beiträge hat das Exception-Handling in der Windows PowerShell zum Thema. Der Artikel wird nach der Veröffentlichung hier verlinkt werden. 

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.