PowerShell Schleifen: for, foreach, while, do-until
Auch wie bei anderen Script- oder Programmiersprachen gibt es in PowerShell Schleifen. Doch wann verwendet man for, foreach, while oder do-until. Wir versuchen euch die verschiedenen Schleifen im Script zu erklären.
Wie sind Schleifen in PowerShell aufgebaut?
In der Regel steht die Bedingung der Schleife in runden Klammern, wohingegen der auszuführende Teil sich in geschweiften Klammern befindet. Gewöhnungsbedürftig sind die Operatoren in PowerShell, welche sich von anderen Sprachen unterscheiden.
Welche Schleifen gibt es in PowerShell?
In PowerShell gibt es verschiedene Schleifen für verschiedene Anwendungsbereiche. Manchmal möchte man Etwas für jedes Objekt ausführen, oder solange bis etwas eintrifft. Je nach Anforderung wählt man zwischen folgenden aus:
- for
- foreach
- while
- do-until
- do-while
Da dies für Anfänger oft keinen Unterschied darstellen, werde ich einzelne Beispiele zu den verschiedenen Schleifen zeigen und näher darauf eingehen, wie diese in einem PowerShell Script verwendet werden.
for mit integrierter Variable
Wie auch in anderen Sprachen ist die for-Schleife wohl die einfachste:
for ($i=1; $i -le 9; $i++) { write-host $i }
In der Runden Klammer wird als erstes die Variable definiert und ein Wert zugewiesen. In diesem Fall $i=1
. Die zweite Angabe ist die eigentliche Bedingung. $i -le 9
bedeutet in diesem Fall, solange kleiner oder gleich 9. Zum Schluss wird nach jedem Durchlaufen der Schleife die Variable $i um 1 erhöht: $i++
. In PowerShell funktioniert das also genauso wie in anderen Sprachen.
foreach für Arrays
Eine foreach-Schleife wird dann benötigt, wenn man alle Inhalte eines Arrays verarbeiten möchte:
$myfiles = Get-ChildItem "C:\Users\huberj\Desktop" -Filter "*.txt" foreach ($datei in $myfiles) { Write-Host $datei }
Foreach steht also (wie die Bezeichnung schon vermuten lässt) für jedes Element. In PowerShell wird dies meist für Arrays eingesetzt. In der runden Klammer wird als erstes eine Variable definiert und das Array als zweites angegeben. Somit wird jedes Element des Arrays einzeln in der Schleife durchlaufen. Der Vorteil liegt hierbei klar auf der Hand: PowerShell ist es egal wie groß der Inhalt ist, es wird jedes Element dynamisch durchlaufen.
while bis Bedingung erfüllt ist
Eine while-Schleife wird in PowerShell verwendet, um etwas zu tun, bis die Bedingung erfüllt ist:
while(($userinput = Read-Host "Ihr Text (beenden mit 'q')") -ne "q"){ write-host $userinput }
Auch bei der While-Schleife steht die Bedingung in der runden Klammer. Solange die Bedingung erfüllt ist, wird die Schleife durchlaufen. Anders als bei do-while, wird diese erst durchlaufen, sobald die Bedingung korrekt ist. In diesem Beispiel ist bei der Eingabe von “q” die Bedingung nicht mehr erfüllt und das Durchlaufen wird abgebrochen.
do-until und do-while
Nicht abweisende Schleifen gibt es in PowerShell auch, und zwar do-while und do-until. Bei den do-Schleifen wird der Schleifenkörper mindestens einmal ausgeführt, da die Bedingung am Ende definiert ist.
$counter = 1 do { Write-Host "Aktueller Wert: $counter" $counter = $counter + 1 } while ($counter -le 5)
Die do-while oder do-until Schleife wird mindestens einmal durchlaufen, da die Bedingung am Ende definiert ist.
Unterschied zwischen do-while und do-until Schleifen
Worin besteht der Unterschied zwischen einer do-while und do-until Schleife? Die Funktionsweise ist exakt gleich, doch die Abbruch-Bedingung ist entscheidend:
- do-while läuft solange wie die Bedingung TRUE ist und bricht erst ab, wenn die Bedingung FALSE ist.
- do-until läuft solange die Bedingung FALSE ist und endet, sobald die Anweisung TRUE ist.
Somit kommt es ganz auf den Anwendungsfall des PowerShell Scripts an, wann man welche Schleife verwendet, da diese genau umgekehrt funktionieren.