So verwenden Sie PowerShell For Loop, While Loop und andere Loops

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.

PowerShell For Loop

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:

Datenschutz

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.

Learn More

for ($var = 1; $var -le 5; $var++) {

Write-Host The value of Var is: $var

}

Write-Host End of for loop.
A PowerShell loop repeating the same operation five times

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.
If the initial condition if false, the loop won’t be executed

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.
We added another condition to stop the script when the variable reaches a false state.

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.
Two different variables are being updated 

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:

Datenschutz

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.

Learn More

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
We ran a PowerShell ForEach loop with a collection of five items.

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

}
This script shows the first five services working on our computer

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.

Diagram showing how a PowerShell While loop works

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:

Datenschutz

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.

Learn More

$var = 1

while ($var -le 5)

{

Write-Host The value of Var is: $var

$var++

}

Write-Host End of While loop.
Example of a loop running five times

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.
The result of the loop if the initial condition is false

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.
Running the loop with a variable we want to be less than 5 and not equal to 3

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.

Diagram showing how a PowerShell Do-While loop works

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.
Running a 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.
The script was still executed even though the initial condition was false.

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:

Datenschutz

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.

Learn More

$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.
The script stops because we wanted our variable to be less than 5 and not equal to 3

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.

Diagram showing how a PowerShell Do-Until loop works

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.
The Do-Until loop is not triggered as it needs an initial false result

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.
Changing the logical operator to ‘greater than’ provides us a false result for the first iterations of the 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.
We use the -or operator to have the Do-Until loop repeat until our variable is greater than 5 or equal to 3

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.

Datenschutz

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.

Learn More

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.
We’ve used a break statement instead of using logical operators to stop the script

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.
The if statement is triggered when the value of the variable is equal to 3

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/