| | 0

PowerShell: Sprachkonstrukte (For-Schleife) – Part 17.2

4.4.2     For-Schleife

Die For-Schleife ist eine einfache numerische Schleife. In der PowerShell ist sie als eine ausdrucksorientierte Schleife implementiert. Das hört sich kompliziert an, bedeutet aber nur, dass sie auch Pipelines verarbeiten kann. Die For-Schleife hat die folgende Syntax:

For
(
For Schlüsselwort
<Pipeline1>;
<Pipeline2>;
Initialisierungspipeline
Testpipeline
<Pipeline3>   
)   
{
Inkrementpipeline
<StatementList>
Anweisungsblock

Die erste und die dritte Pipeline können aus mehreren, durch Komma getrennten, Ausdrucken bestehen. Die Pipelines selbst werden durch Semikolons voneinander getrennt. Die Initialisierungspipeline dient meistens zum Initialisieren einer Laufvariablen. Die Testpipeline wertet zu jedem Durchlauf der For-Schleife einen logischen Ausdruck aus. Die Inkrementpipeline verändert in den meisten Fällen die Laufvariable oder sollte das zumindest tun. Alle Pipelines sind optional, sind alle nicht vorhanden, entsteht eine Endlosschleife. Der Anweisungsblock wird solange ausgeführt, solange die Testpipeline zu dem Wert $True evaluiert werden kann. Die gesamte For-Schleife kann auch in einer einzigen Zeile geschrieben werden.

Beispiele:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1.  For ($i = 1;$i -le 5;$i++){"Zeile_$i"}
Zeile_1
Zeile_2
Zeile_3
Zeile_4
Zeile_5
2.  For ($i = 0;$($y = $i*2; $i -lt 5);$i++){$y}
0
2
4
6
8
3.  For ($i = (Get-ChildItem).count;$i -gt 0;$i--){"File_$i"}
File_9
File_8
File_7
File_6
File_5
File_4
File_3
File_2
File_1
4.  For ($($Total = 0;$i = 0),$($IExplore = Get-Process iexplore);$i -lt $IExplore.Count;$i++){$Total+=$IExplore[$i].Handles}
5.  $total
10048

Im ersten Beispiel (Zeile 1.) wird die Variable $i mit dem Wert 1 initiiert. Die Testbedingung ist, ob $i kleiner als fünf ist. Die Inkrementpipeline erhöht bei jedem Durchlauf der Schleife den Wert von $i um eins. Der Anweisungsblock gibt einen String aus, dessen Bestandteil die Variable $i ist (sie wird hier expandiert, da der String in doppelten Anführungszeichen steht).

Im zweiten Beispiel wird in der Testpipeline, neben der Testbedingung, noch ein Ausdruck für $y eingegeben, welcher den Wert von $i mit zwei multipliziert und $y zuweist. Dies wird bei jedem Durchlauf der Schleife ausgeführt. Schließlich wird im Anweisungsblock der Wert von $y ausgegeben. Das Ergebnis sind die ersten fünf geraden Zahlen.

Im dritten Beispiel wird die $i Variable mit der Anzahl der Dateien im aktuellen Verzeichnis initialisiert ((Get-ChildItem).Count). Geprüft wird, ob die Variable $i größer als Null ist. In der Inkrementpipeline wird die $i Variable in jedem Durchlauf um eins dekrementiert und der Anweisungsblock gibt schließlich, ähnlich wie im ersten Beispiel, einen String aus.

Im vierten Beispiel werden in der Initialisierungspipeline zwei Ausdrucke verwendet. In dem ersten werden die Variablen $Total und $i auf Null gesetzt. In dem zweiten Ausdruck wird die Variable $IExplore mit allen laufenden Prozessen des Internet Explorers initialisiert. Dabei entsteht ein Objekt vom Typ [System.Object[]], welches sich wie ein Array verhält. Die Elemente sind die einzelnen Process-Objekte ([System.Diagnostics.Process]) des Internet Explorers. Die Testbedingung prüft, ob $i kleiner als die Anzahl der Prozesse ist. Im Anweisungsblock werden schließlich die Handles der einzelnen Prozesse summiert. Die Prozesse selbst werden über die Indizes des Arrays mit Hilfe von $i angesprochen.

 

Eine Übersicht aller Artikel dieser Windows PowerShell Blogserie findet ihr hier.

Zurück zu Part 17.1 – Sprachkonstrukte (If/ElseIF/Else Anweisung)

Weiter zu Part 17.3 – Sprachkonstrukte (Foreach- und While Schleife)