In diesem Artikel werden wir Schleifen in PowerShell untersuchen, einschließlich For-Schleifen, While-Schleifen, Do-While-Schleifen und Do-Until-Schleifen. Ich werde erklären, wie PowerShell-Schleifen aufgebaut sind und wie Sie Bedingungen definieren können, um eine Schleife zu betreten oder zu verlassen.
PowerShell For-Schleife
Die For-Schleife ist eine Zählschleife und wird hauptsächlich verwendet, wenn Sie eine Aufgabe eine bestimmte Anzahl von Malen wiederholen müssen, eine Sammlung verarbeiten oder Elemente anhand einer Indexnummer angeben möchten. Sie wiederholt sich, solange die Testbedingung zu true ausgewertet wird, und endet bei false.

Die Syntax für eine For-Schleife lautet wie folgt:
for (<Init>; <Condition>; <Repeat>) { <Script Block> }
- Der <Init> Block führt einen Befehl oder eine Reihe von Befehlen vor Beginn der Schleife aus. Gewöhnlich ist dies der Ort, an dem Sie die Zählvariable initialisieren.
- Im <Condition> Abschnitt überprüfen Sie den bedingten Test. Wenn er true ist, treten Sie in die Schleife ein und führen die Befehle im Skriptblock aus. Dann wird die Bedingung erneut überprüft, bis sie zu false führt.
- Der <Repeat> Platzhalter führt einen oder mehrere Befehle aus, die in jeder Schleifendurchführung durch Kommas getrennt sind. Gewöhnlich wird er verwendet, um die Zählvariable zu ändern.
Wenn Sie eine bestimmte Operation fünf Mal wiederholen möchten, verwenden Sie das folgende Beispiel:
Wissen Sie, welche sensiblen Daten wo gespeichert sind, bewerten Sie das damit verbundene Risiko und setzen Sie Richtlinien-basierte Datenschutzmaßnahmen mit DataSecurity Plus um, der Datenschutzsoftware von ManageEngine. Starten Sie heute mit einer voll funktionsfähigen, 30-tägigen kostenlosen Testversion.
for ($var = 1; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Hier wird die Variable mit einem Wert von 1 initialisiert, der kleiner als 5 ist. Daher betreten Sie die Schleife und führen den Skriptblock aus. Bei jeder Iteration wird der Wert der Variable um 1 erhöht und gegen die Bedingung ausgewertet, bis das Ergebnis false ist.
Da die Bedingung zu Beginn ausgewertet wird, wird der Befehlsblock nicht ausgeführt, wenn das Ergebnis false ist:
for ($var = 6; $var -le 5; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Bei Bedarf können Sie logische Operatoren verwenden, um weitere Bedingungen anzugeben. In diesem Fall haben wir mehrere Bedingungen hinzugefügt. Und da der logische Operator -and nur dann zu true führt, wenn beide Bedingungen true sind, stoppt die Schleife, wenn der Ausdruck $var -ne 3 einen false-Zustand erreicht.
for ($var = 1; $var -le 5 -and $var -ne 3; $var++) { Write-Host The value of Var is: $var } Write-Host End of for loop.

Wie bereits erwähnt, können Sie in den Platzhaltern <Init> und <Repeat> einen oder mehrere Befehle ausführen. Im folgenden Beispiel haben wir eine Variable $var1 mit einem Anfangswert von 1, der inkrementiert wird, und ihr Wert wird daraufhin daraufhin getestet, ob er kleiner oder gleich 5 ist.
Jedoch haben wir auch eine zweite Variable, $var2. Sie hat einen Anfangswert von 5, der dekrementiert wird, aber nicht als Teil der Bedingung ausgewertet wird.
for (($var1 = 1), ($var2 = 5); $var1 -le 5; ($var1++), ($var2--)) { Write-Host The value of Var1 is: $var1 Write-Host The value of Var2 is: $var2 } Write-Host End of for loop.

Wie man PowerShell-Schleifenbedingungen definiert
In PowerShell werden Befehle sequentiell ausgeführt. Manchmal ist es jedoch erforderlich, einen Befehl oder eine Gruppe von Befehlen zu wiederholen, bis eine bestimmte Bedingung erfüllt ist. Dies wird als Schleife bezeichnet.
Um zu definieren, unter welchen Bedingungen eine Schleife in PowerShell betreten oder verlassen werden soll, müssen Sie Vergleichsoperatoren verwenden. Sie ermöglichen es Ihnen, Werte zu vergleichen oder einen Wert zu finden, der einem bestimmten Muster entspricht. Das Ergebnis ist ein Boolescher Wert ( true oder false), der von der Schleifenlogik ausgewertet wird.
Sie können Vergleichsoperatoren verwenden, um numerische Werte zu vergleichen:
Operation | Result |
2 -eq 2 | True |
2 -eq 5 | False |
3 -gt 7 | True |
5 -lt 3 | False |
Sie können auch Zeichenfolgenwerte mit Vergleichsoperatoren vergleichen:
Erfahren Sie, welche sensiblen Daten wo gespeichert sind, bewerten Sie das damit verbundene Risiko und implementieren Sie richtlinienbasierte Datenschutzmaßnahmen mit DataSecurity Plus, der Datenschutzsoftware von ManageEngine. Starten Sie noch heute mit einer voll funktionsfähigen, 30-tägigen kostenlosen Testversion.
Operation | Result |
‘PowerShell’ -eq ‘powershell’ | True |
‘PowerShell’ -eq ‘cmd’ | False |
‘PowerShell’ -like ‘power*’ | True |
‘PowerShell’ -notlike ‘*shell’ | False |
PowerShell Foreach-Schleife
Die Foreach-Schleife wird verwendet, um Elemente in einer Sammlung zu durchlaufen. In diesem Szenario haben Sie keine Bedingung zu evaluieren, aber die Schleife wiederholt sich, bis alle Elemente in der Sammlung verarbeitet wurden.
<Figure Foreach_Diagram.png> The syntax for a Foreach loop is the following: foreach ($<item> in $<collection) { <Script Block> }
Hier beginnen wir mit der foreach-Anweisung, gefolgt von Klammern mit einer Variablen und einer Sammlung, die durchlaufen werden soll. Dann folgt der Skriptblock, der ausgeführt werden soll. Die Variable wird automatisch erstellt und vor jeder Ausführung der Schleife mit einem Wert aus dem Array belegt.
Um die Schleife fünfmal auszuführen, benötigen Sie eine Sammlung mit fünf Elementen. In diesem Fall handelt es sich um die Ganzzahlen von 1 bis 5:
$collection = 1..5 foreach ($item in $collection) { Write-Host The value of Item is: $item } Write-Host End of foreach loop

Die Variable wird mit dem ersten Wert der Sammlung initialisiert, der 1 ist, dann wird der Skriptblock ausgeführt. Bei der nächsten Iteration erhält die Variable das nächste Element im Array zugewiesen, das 2 ist. Der Skriptblock wird wiederholt verarbeitet, bis alle Elemente in der Sammlung verarbeitet sind.
Zum Beispiel, wenn Sie die ersten fünf Dienste, die auf Ihrem Computer arbeiten, verarbeiten möchten, würde Ihre Schleife so aussehen:
foreach ($service in (Get-Service | Select-Object -First 5)) { Write-Host Service name is: $service.name and status is $service.status }

Sie sollten verstehen, dass es einen Unterschied zwischen der Foreach-Schleife und dem Befehl Foreach-Object gibt. Es ist leicht, sie zu verwechseln. Eine Foreach-Schleife beginnt immer mit einer Foreach-Anweisung, während der Befehl Foreach-Object einem Befehl folgt und die Objekte verarbeitet, die durch ihn gesendet werden.
PowerShell While-Schleife
Die While-Anweisung in PowerShell wird verwendet, um eine Schleife zu erstellen, die einen Befehl oder eine Befehlsgruppe ausführt, wenn die Bedingung als true ausgewertet wird. Sie überprüft die Bedingung, bevor der Skriptblock ausgeführt wird. Solange die Bedingung true ist, wird PowerShell den Skriptblock ausführen, bis die Bedingung zu false wird.

Die Syntax für eine While-Schleife lautet wie folgt:
while (<Condition>){<Script Block>}
Zum Beispiel, wenn Sie eine Variable namens var mit einem anfänglichen Wert von 1 haben und die Schleife fünfmal wiederholen möchten, sollte die Schleife folgender Struktur folgen:
Erfahren Sie, welche sensiblen Daten wo gespeichert sind, bewerten Sie das damit verbundene Risiko und implementieren Sie richtlinienbasierte Datenschutzmaßnahmen mit DataSecurity Plus, der Datenschutzsoftware von ManageEngine. Beginnen Sie noch heute mit einer voll funktionsfähigen, 30-tägigen kostenlosen Testversion.
$var = 1 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

In dem obigen Beispiel wird die Variable außerhalb der Schleife initialisiert und im Skriptblock inkrementiert. Das Write-Host-Cmdlet wird verwendet, um den Wert der Variablen während jeder Schleifenzyklus auszugeben.
Es ist wichtig zu beachten, dass wenn die Bedingung anfangs false ist, wird die Schleife nicht ausgelöst. In unserem Beispiel, wenn wir einen Wert für die Variable hätten (var = 6), dann hätte der Schleifenbefehl überhaupt nicht funktioniert und der Skriptblock wäre nicht ausgeführt worden.
$var = 6 while ($var -le 5) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

Sie können komplexere Bedingungen unter Verwendung logischer Operatoren verwenden. Wenn Sie beispielsweise möchten, dass die Variable kleiner als 5 ist und nicht gleich 3, würde die Schleife so aussehen:
$var = 1 while ($var -le 5 -and $var -ne 3) { Write-Host The value of Var is: $var $var++ } Write-Host End of While loop.

Wie bereits erwähnt, ist das Ergebnis bei Verwendung des logischen Operators -and nur dann true, wenn beide Bedingungstests zu true ausgewertet werden. In diesem Fall, wenn der Variable der Wert 3 zugewiesen wird, wird die zweite Bedingung zu false: Dies führt zu einem false Ergebnis und stoppt die Schleife.
PowerShell Do-While Schleife
A Do-While loop is a variant of the While loop, and the main difference is that the script block is executed before the condition is checked. This means that even if the start condition is false, the script block will be executed at least once.

Die Syntax für eine Do-While Schleife ist folgende:
do { <script block> } while (<condition>)
Also, wenn wir das gleiche Beispiel wie zuvor verwenden, würde der Code wie folgt aussehen:
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

Lassen Sie uns eine Do-While Schleife mit einem Wert für die Variable var = 6 ausführen. Hier wird die Schleife einmal ausgeführt, bevor geprüft wird, dass die Bedingung false war.
$var = 6 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5) Write-Host End of Do-While loop.

Es ist auch möglich, logische Operatoren zu verwenden. Wenn wir das gleiche Beispiel wie zuvor verwenden, werden Sie sehen, dass die Schleife stoppt, wenn der Wert der Variable 3 beträgt, da wir wollten, dass unsere Variable kleiner als 5 und nicht gleich 3 ist:
Erfahren Sie, welche sensiblen Daten wo gespeichert sind, bewerten Sie das damit verbundene Risiko und setzen Sie Richtlinien-basierte Datenschutzmaßnahmen mit DataSecurity Plus um, der Datensicherheitssoftware von ManageEngine. Beginnen Sie noch heute mit einer voll funktionsfähigen, 30-tägigen kostenlosen Testversion.
$var = 1 do { Write-Host The value of Var is: $var $var++ } while ($var -le 5 -and $var -ne 3) Write-Host End of Do-While loop.

PowerShell Do-Until Schleife
Die Do-Until Schleife funktioniert genauso wie die Do-While Schleife: Sie führt zuerst den Skriptblock aus und überprüft dann die Bedingung. Der Unterschied hierbei ist, dass während die Do-While Schleife mit einer true Bedingung in die Schleife eintritt, die Do-Until Schleife nach einer false Bedingung sucht, um in die Schleife einzutreten.

Die Syntax für eine Do-Until Schleife ist folgende:
do { <script block> } until (<condition>)
Wie Sie sehen, sieht die Struktur fast identisch zu einer Do-While Schleife aus. Lassen Sie uns jedoch anschauen, was das Ergebnis wäre, wenn wir unser vorheriges Beispiel weiterverwenden würden:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -le 5) Write-Host End of Do-Until loop.

Da der Bedingungstest zu true auswertet, wird die Do-Until Schleife nicht ausgelöst, da wir ein false Ergebnis benötigen, um in die Schleife einzutreten. In diesem Fall, wenn Sie die Schleife 5 Mal wiederholen möchten, muss der logische Operator auf größer als (-gt) geändert werden, was für die ersten 5 Iterationen ein falsches Ergebnis liefern wird:
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5) Write-Host End of Do-Until loop.

Erneut, da wir benötigen, dass die anfängliche Bedingung false ist, um in die Schleife einzutreten und darin zu bleiben, würde dies logische Operatoren ebenfalls beeinflussen, wenn wir einen komplexeren Ausdruck definieren müssten.
Im folgenden Beispiel müssen wir den -oder Operator verwenden, damit die Schleife wiederholt wird, bis unsere Variable größer als 5 ist (das erforderliche falsche Ergebnis) oder gleich 3 ist. Wir konnten nicht den -und Operator verwenden, der erfordert hätte, dass die Variable gleichzeitig größer als 5 und gleich 3 ist, da dies zu einer endlosen Schleife geführt hätte.
$var = 1 do { Write-Host The value of Var is: $var $var++ } until ($var -gt 5 -or $var -eq 3) Write-Host End of Do-Until loop.

Wie man PowerShell-Schleifen steuert
Sie können den Ablauf der Ausführung in einer Schleife steuern, indem Sie Schlüsselwörter verwenden, um entweder die Schleife ohne Evaluierung der Bedingung zu verlassen oder die aktuelle Iteration der Schleife zu überspringen. Obwohl diese Schlüsselwörter manchmal nützlich sein können, werden sie nicht immer empfohlen, da sie das Skript schwerer lesbar machen können.
Die break-Anweisung
Die break-Anweisung stoppt und beendet sofort die aktuelle Schleife, ohne den restlichen Code im Skriptblock der Schleife auszuführen und ohne die angegebene Bedingung zu evaluieren. Dadurch kann PowerShell damit fortfahren, den restlichen Code auszuführen.
Das break-Schlüsselwort verhält sich unabhängig von der Art der verwendeten Schleife gleich. Verwenden wir eines der obigen Beispiele, zählen von 1 bis 5 und beenden die Schleife, wenn die Zählvariable gleich drei ist. Aber dieses Mal fügen wir ein break hinzu, anstatt logische Operatoren in der Testbedingung zu verwenden.
Erfahren Sie, welche sensiblen Daten wo gespeichert sind, bewerten Sie das damit verbundene Risiko und setzen Sie Richtlinien-basierte Datenschutzmaßnahmen mit DataSecurity Plus um, der Datenschutzsoftware von ManageEngine. Starten Sie noch heute mit einer voll funktionsfähigen, 30-tägigen kostenlosen Testversion.
Um dies zu erreichen, wird die if-Anweisung verwendet, um die Ausstiegskriterien zu definieren.
For ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {break} Write-Host The value of Var is: $var } Write-Host End of for loop.

Wenn der Wert der Zählvariable gleich 3 ist, wird die if-Anweisung ausgelöst und das break-Schlüsselwort ausgeführt. Da das break-Schlüsselwort vor dem Write-Host-Befehl im Skriptblock platziert ist, wird letzterer nicht verarbeitet. Die Schleife stoppt und das Skript fährt fort, den verbleibenden Code auszuführen.
Die continue-Anweisung
Die continue-Anweisung ermöglicht es Ihnen, den verbleibenden Teil des Codes zu überspringen und zum Anfang der Schleife zurückzukehren, ohne sie zu verlassen.
Wie im vorherigen Beispiel wird eine For-Schleife verwendet, aber dieses Mal überspringt PowerShell anstatt die Schleife zu beenden, wenn die Zählvariable 3 erreicht, den restlichen Code für die aktuelle Iteration und fährt mit der Schleife fort, bis der Bedingungstest false ist.
for ($var = 1; $var -le 5; $var++) { if ($var -eq 3) {Continue} Write-Host The value of Var is: $var } Write-Host End of for loop.

Wie Sie vielleicht bemerkt haben, wird bei einem Wert der Variable von 3 die if-Anweisung ausgelöst, die die continue-Anweisung ausführt. Anschließend überspringt sie den Rest des Codes innerhalb der Schleife, ohne sie zu unterbrechen.
Fazit
PowerShell unterstützt verschiedene Arten von Schleifen, und es ist wirklich wichtig zu verstehen, wie sie Ihnen helfen können, Ihre Skripte zu vereinfachen und bestimmte Aktionen auf konsistente Weise zu wiederholen. Wir haben auf Petri umfangreich über PowerShell-Tipps und -Tricks berichtet, also schauen Sie sich unbedingt unsere anderen Anleitungen dazu an, wie man PowerShell-Skripte schreibt und wie man die ForEach-Paralleloption verwendet.
Verwandter Artikel:
Source:
https://petri.com/how-to-use-powershell-for-while-loops/