Die PowerShell While-Schleife: Ein grundlegender Leitfaden

PowerShell ist eine leistungsstarke Skriptsprache, die viele Funktionen für die Automatisierung und Verwaltung von Windows-basierten Systemen bietet. Eine der am häufigsten verwendeten Strukturen ist die PowerShell-Schleife while.

Keine Sorge, wenn Sie beim Erlernen der PowerShell-Skripterstellung in einer Endlosschleife stecken bleiben. Lassen Sie sich von der PowerShell-while-Schleife zu Ihrem großen Ausbruch führen. Und in diesem Tutorial werden Sie zu den Grundlagen der Arbeit mit while-Schleifen in PowerShell zurückkehren, während Sie Ihre Skripte schreiben.

Lesen Sie weiter, um Ihre PowerShell-Skripting-Fähigkeiten auf die nächste Stufe zu bringen!

Voraussetzungen

In diesem Tutorial wird eine praktische Demonstration durchgeführt. Stellen Sie sicher, dass Sie Folgendes haben, um mitzumachen:

  • A Windows machine – This tutorial uses Windows 10.
  • Windows PowerShell 5.0 oder höher installiert – Dieses Tutorial verwendet PowerShell 7.
  • A user account with administrator privileges.

Ausführen von einzelnen Bedingungen while-Schleifen

Eine der einfachsten Arten von while-Schleifen ist die Einzelbedingungsart. Im Gegensatz zur If-Anweisung führt dieser Schleifentyp einen Satz von angegebenen Befehlen aus, solange eine bestimmte Bedingung als wahr ausgewertet wird. Wenn ein „False“ zurückgegeben wird, bricht die Schleife ab, und die Ausführung wird mit dem Rest des Skripts fortgesetzt.

Unten finden Sie die Syntax für eine einzelne Bedingung while Schleife:

  • Das Erste, was auffällt, ist die Verwendung von Klammern. Die Bedingung muss in Klammern eingeschlossen sein, während der Codeblock eine Gruppe von PowerShell-Befehlen ist, die ausgeführt werden, solange die Bedingung wahr ist.
  • Das Zweite, was zu beachten ist, ist, dass die Bedingung einen booleschen Wert zurückgeben muss, der entweder True oder False ergibt.
while (condition)
{

	# Codeblock zum Ausführen

}

Führen Sie den folgenden Code aus, wobei der Wert von $val bei 0 beginnt und jedes Mal, wenn der Codeblock ausgeführt wird, um 1 erhöht wird, bis der Wert der Variable $val 3 erreicht.

Wenn $val den Wert 3 erreicht, was die Bedingung falsch macht, wird die Schleife abgebrochen, und die Ausführung wird mit dem Rest des Skripts fortgesetzt.

# Deklariert die Variable $val mit dem anfänglichen Wert von 0
$val = 0

# Setzt die while-Schleife so, dass sie bis zum Wert 3 der Variable $val läuft
while($val -ne 3)
{
	# Erhöht den Wert der Variable $val um 1
	$val++
	
	# Gibt den aktuellen Wert der Variable $val aus
	Write-Host $val
}
Understanding Single Condition While Loops.

Ausführen einer PowerShell While-Schleife mit integrierten Variablen ($true/$false)

Das vorherige Beispiel, das Bedingungen in der while-Schleife verwendet, funktioniert gut. Aber Sie können auch PowerShell’s integrierte Variablen wie $true und $false verwenden, um eine While-Schleife zu erstellen.

Die unten stehende Syntax führt aus, bis $true nicht mehr $true ist. Mit anderen Worten, die Schleife läuft endlos. Sie müssen jedoch immer eine Möglichkeit einschließen, aus einer endlosen Schleife auszubrechen. Andernfalls sind Sie für immer stecken geblieben. Sie werden später in diesem Tutorial mehr darüber erfahren, wie Sie mit break und continue aus einer Schleife ausbrechen können.

while($true)
{

	# Code-Block zum Ausführen

}

Führen Sie den unten stehenden Code-Block aus, der endlos läuft und den Wert von $i auf die Konsole druckt.

# Deklariert die Variable $i mit dem Anfangswert 0
$i = 0

# Setzt die While-Schleife auf "während die Bedingung $true ist"
while($true)
{
	# Erhöht den Wert von $i um 1
	$i++
	
	# Druckt den aktuellen Wert der Variable $i
	Write-Host $i
}

Drücken Sie nun Ctrl+C, um aus der Schleife auszubrechen. Diese Schleife verbraucht viele Systemressourcen, also seien Sie vorsichtig bei ihrer Verwendung.

Executing a while loop with PowerShell’s built-in ($true) variable

Ausführen von Mehrfachbedingungs-While-Schleifen

Zusätzlich zu einfachen Bedingungs-while-Schleifen können auch mehrere Bedingungen in einer while-Schleife erstellt werden. Wie bei der einfachen Bedingungs-While-Schleife müssen die Bedingungen einen booleschen Wert zurückgeben, entweder True oder False.

Im Folgenden finden Sie die Syntax für eine mehrfache Bedingungs-while-Schleife, ähnlich der Syntax für eine einfache Bedingungs-while-Schleife. Der Hauptunterschied besteht darin, dass Sie mehrere Bedingungen mit den folgenden Operatoren kombinieren können:

  • UND (-and) – Beide Bedingungen müssen wahr sein.
  • ODER (-or) – Mindestens eine Bedingung muss wahr sein.
# UND Operator
while (condition1 -AND condition2)
{

	# Code-Block zum Ausführen

}

# ODER Operator
while (condition1 -OR condition2)
{

	# Code-Block zum Ausführen

}

Führen Sie den folgenden Code aus, der solange eine Schleife durchläuft, wie $val ungleich (-ne) 3 ist -und $i ungleich (-ne) 5 ist.

Wenn die Werte beider Variablen ihre jeweiligen Bedingungen erfüllen, wird die Schleife unterbrochen, und die Ausführung wird mit dem Rest des Skripts fortgesetzt.

# Deklariert die Variablen $val und $i mit Anfangswerten von 0
$val = 0
$i = 0

# Setzt die While-Schleife so, dass sie ausgeführt wird, bis $val gleich 3 und $i gleich 5 ist
while($val -ne 3 -and $i -ne 6)
{
	# Erhöht $val um 1
  $val++
	# Erhöht $i um 2
  $i += 2
	# Gibt den aktuellen Wert der Variablen $val und $i aus
  Write-Host "$val, $i"
}

Ausführen einer while-Schleife mit UND Operator

Executing a while loop with AND operator

Jetzt führen Sie den unten stehenden Code aus, der den Benutzer nach seinem Alter fragt, das in der Variable $age gespeichert ist.

Wenn der Benutzer eine Zahl eingibt, die kleiner ist als (-lt) 1 oder keine Zahl ist (-nomatch), wird der Benutzer erneut aufgefordert, eine gültige Zahl einzugeben. Dieses Verhalten ist nützlich, um Benutzern mehrere Chancen zu geben, eine gültige Eingabe zu machen.

# Fordert die Benutzer auf, ihr Alter einzugeben
$age = Read-Host "Please Enter Your Age"

# Setzt die While-Schleife so, dass sie läuft, bis der Benutzer eine gültige Eingabe macht
while($age -notmatch "\\d+" -or $age -lt 1)
{
	# Fordert den Benutzer erneut auf, ein gültiges Alter einzugeben
  $age = Read-Host "Please Enter Your Valid Age"
}
# Gibt die gültige Altersangabe aus
Write-Host "Your age is $age

Im folgenden Output sehen Sie, dass der Benutzer dreimal aufgefordert wurde, sein Alter einzugeben, wie folgt:

  • Das erste Mal gab der Benutzer zehn ein, was keine Zahl ist.
  • Das zweite Mal gab der Benutzer 0 ein, was unter 1 liegt.
  • Das dritte Mal gab der Benutzer 10 ein, was ein gültiges Alter ist.
Executing a while loop with the OR operator

Verwendung der BREAK- und CONTINUE-Schlüsselwörter in While-Schleifen

Sie haben gesehen, wie while-Schleifen Flexibilität zu Ihrem PowerShell-Skript hinzufügen. Aber um die Ausführung Ihrer While-Schleifen besser zu kontrollieren, fügen Sie die Schlüsselwörter break und continue hinzu.

Zum Beispiel, wenn Sie nur eine bestimmte Anzahl von Elementen in einem Array verarbeiten möchten, können Sie das BREAK-Schlüsselwort verwenden, um die Schleife zu verlassen, wenn die gewünschte Anzahl von Elementen verarbeitet wurde.

Diese Schlüsselwörter funktionieren wie folgt:

Keyword Function
break Immediately exits the loop and continues execution with the rest of the script.
continue Skips over the remaining code block in the current iteration of the loop and continues with the next iteration.

Führen Sie den folgenden Code aus, der durch ein Array von 10 Elementen schleift.

Im folgenden Code überprüft die if-Anweisung den Wert von $i. Wenn der Wert von $i 5 ist, überspringt das continue-Schlüsselwort den verbleibenden Code in der Schleife und fährt mit der nächsten Iteration fort. Wenn der Wert von $i 8 ist, beendet das break-Schlüsselwort die Schleife und fährt mit dem restlichen Skript fort.

Andernfalls gibt die while-Schleife aus (Write-Host) und erhöht den Wert der Variablen $i um 1.

# Deklariert ein $array von 10 Elementen
$array = 1..10
# Deklariert die Variable $i mit dem Anfangswert 0
$i = 0
# Setzt die While-Schleife so, dass sie ausgeführt wird, bis die Bedingung erfüllt ist
while($i -lt $array.Count)
{
	# Überprüft, ob $i gleich 5 ist
  if($i -eq 5)
  {
		# Wenn ja, erhöhe $i um 1
    $i++
		# Fahre mit der nächsten Iteration fort
    continue
  }
	# Überprüft, ob $i gleich 8 ist
  if($i -eq 8)
  {
		# Wenn ja, beende die While-Schleife und fahre mit dem restlichen Skript fort
    break
  }
	# Gibt den aktuellen Wert von $i aus
  Write-Host "Processing item $i"
	# Erhöht $1 um 1
  $i++
}

Wie Sie im untenstehenden Output sehen können, hat die Schleife die fünften und achten Elemente im Array übersprungen. Die while-Schleife hat alle anderen Elemente im Array verarbeitet und ist nach Erreichen des achten Elements beendet.

Executing a while loop with break and continue keywords

Begrenzung der Laufzeit einer While-Schleife

In der Regel möchten Sie möglicherweise die Laufzeit einer Schleife begrenzen. Vielleicht versuchen Sie, eine Verbindung zu einem Remote-Server herzustellen. In diesem Fall können Sie dem Server Zeit geben, zu antworten, bevor Sie die Schleife durch Verwendung des Start-Sleep-Cmdlets in Ihrer while-Schleife beenden.

Das Cmdlet Start-Sleep pausiert die Ausführung des Skripts für eine bestimmte Zeit.

Führen Sie den folgenden Code aus, um das aktuelle Datum und die Uhrzeit zu erhalten und im $startTime Variable zu speichern Get-Date. Die while-Schleife wird ausgeführt, solange das aktuelle Datum/die aktuelle Uhrzeit weniger als 10 Sekunden vom im $startTime gespeicherten Wert entfernt ist.

Während die while-Schleife läuft, wird eine Nachricht gedruckt, während das Cmdlet Start-Sleep die Ausführung des Skripts für 1 Sekunde pausiert.

Der folgende Codeblock ist nur ein Platzhalter für das, was Sie tatsächlich in der Praxis verwenden würden. Sie können bei Bedarf mehr Code in die Schleife einfügen.

# Aktuelles Datum/Uhrzeit abrufen und speichern
$startTime = Get-Date
# Setzt die While-Schleife, um solange das aktuelle Datum/Uhrzeit kleiner als 10 Sekunden ist 
	# aus dem Wert, der in $startTime gespeichert ist.
while((Get-Date) -lt ($startTime.AddSeconds(10)))
{
	# Gibt eine Nachricht aus
  Write-Host "Waiting for server to respond..."
	# Pausiert das Skript für eine Sekunde
  Start-Sleep -Seconds 1
}

Hier unten siehst du, dass die Schleife weiterhin für 10 Sekunden ausgeführt wurde, bevor sie die Schleife verlässt.

Limiting the time a while loop runs

Zusammenfassung

PowerShell while Schleifen sind nützlich, wenn komplexe Konzepte behandelt werden müssen, um nicht in einer Schleife stecken zu bleiben oder während des Schreibens von Skripten. In diesem Tutorial hast du viele Möglichkeiten gelernt, wie man mit while Schleifen arbeitet, um flexiblere und leistungsstärkere Skripte zu erstellen.

Mit diesem neu gewonnenen Wissen ist alles möglich. Warum also nicht die Verwendung von logischen Operatoren und Schlüsselwörtern maximieren, um Aufgaben mit deinen Skripten zu automatisieren?

Source:
https://adamtheautomator.com/powershell-while-loop/