PowerShell For Loop: Ein umfassender Leitfaden

Wenn Sie PowerShell-Skripte verwenden, um Systeme zu verwalten oder Massenaufgaben zu verarbeiten, werden Sie mit hoher Wahrscheinlichkeit die Notwendigkeit haben, eine Schleifenstruktur in Ihre Skripte einzufügen. Es gibt viele Arten von Schleifen in PowerShell, und eine davon ist die for-Schleife. Die PowerShell for-Schleife ermöglicht das schnelle Ausführen desselben Befehlssatzes auf mehreren Elementen und liefert dabei konsistente Ergebnisse.

In diesem Artikel erfahren Sie, was die for-Schleife in PowerShell ist, verstehen ihre Syntax und welche Komponenten eine for-Schleifenanweisung ausmachen. Anhand von Beispielen lernen Sie außerdem verschiedene Möglichkeiten kennen, wie Sie die for-Schleife verwenden können.

Verständnis der PowerShell for-Schleifenanweisung und Platzhalter

Die PowerShell for-Schleife wird häufig verwendet, wenn die Anzahl der Durchläufe (Iterationszähler), die ein Befehl oder Prozess ausführen soll, bereits bekannt ist. Ein Beispiel wäre, wenn Sie nur eine Teilmenge von Werten in einem Array verarbeiten möchten (z. B. nur 10 von X Elementen).

Mit einer for-Schleife haben Sie mehr Kontrolle über Grenzen und Bedingungen, wann der Code beendet werden soll. Dies steht im Gegensatz zur foreach-Schleife oder dem ForEach-Object-Cmdlet, bei dem die Iteration nach der Verarbeitung des letzten Elements in der Sammlung endet.

Nachfolgend finden Sie die Syntax der for-Schleifenanweisung zur Referenz.

for (<Initial iterator value>; <Condition>; <Code to repeat>)
{
    <Statement list>
}

Wie Sie in der obigen Syntax sehen können, kann die PowerShell for-Schleifenanweisung in vier Platzhalter aufgeteilt werden, die Sie kennen müssen. Dies sind die Initial, Condition, Repeat und Statement-Liste Platzhalter.

  • Der Initial-Platzhalter gibt an, welchen Startwert du festlegen möchtest. Dieser Wert wird nur einmal von der Anweisung gelesen. In der Regel weisen Skripter dieser Variablen den Wert Null zu.
  • Der Bedingungs-Platzhalter gibt das Limit oder die Bedingung an, um festzustellen, ob die Schleife weiter ausgeführt werden soll oder enden soll. Der Ausdruck, der in diesem Platzhalter verwendet wird, ergibt den Wert True.
  • Der Wiederholungs-Platzhalter akzeptiert mehrere Befehle. Die in diesem Platzhalter angegebenen Befehle werden nach jeder Wiederholung der Schleife ausgeführt und bevor die Bedingung erneut überprüft wird. Skripter verwenden dies in der Regel, um einen Ausdruck bereitzustellen, um entweder den Wert im Initial-Platzhalter zu erhöhen oder zu verringern.
  • Zuletzt befindet sich der Anweisungsliste-Platzhalter, in dem der Hauptcode, den du ausführen möchtest, platziert wird. Der Code in diesem Platzhalter wird in einer Schleife wiederholt ausgeführt, bis die Bedingung einen Wert von $False ergibt.

Verständnis des Ausführungsflusses der PowerShell For-Schleife

Um das Funktionsprinzip der PowerShell For-Schleife besser zu verstehen, solltest du dich mit ihrem Ausführungsfluss vertraut machen. Eine For-Schleife ist zunächst ein Vier-Schritte-Prozess, der sich nach dem ersten Durchlauf zu einem Drei-Schritte-Prozess entwickelt. Um dies weiter zu erläutern, lies den folgenden Algorithmus.

SCHRITT 1

Zu Beginn der For-Schleifen-Anweisung wird der Initial-Wert gelesen und im Speicher gespeichert.

Beispiel: $num = 0

SCHRITT 2

Die for-Schleifen-Anweisung bewertet das boolesche Ergebnis des Ausdrucks innerhalb des Platzhalters für die Bedingung. Wenn das Ergebnis $false ist, wird die for-Schleife beendet. Wenn das Ergebnis $true ist, wird die for-Schleife mit dem nächsten Schritt fortgesetzt.

Beispiel: $num -lt 10

SCHRITT 3

PowerShell führt den Code innerhalb des Platzhalters für die Anweisungsliste aus. Es können ein oder mehrere Befehle, Skriptblöcke oder Funktionen enthalten sein.

Beispiel: "Ich zähle $num"

SCHRITT 4

In diesem Schritt wird der Ausdruck im Platzhalter für die Wiederholung ausgeführt, der den aktuellen Wert des Platzhalters für den Anfangswert aktualisiert. Anschließend wird der Ablauf zu Schritt 2 zurückgeführt.

Beispiel: $num++

Verwendung der PowerShell For-Schleife (Beispiele)

In den nächsten Abschnitten werden einige Beispiele dafür gezeigt, wie die for-Schleife auf verschiedene Arten verwendet werden kann. Diese Beispiele können praktisch oder im wirklichen Leben möglicherweise keinen direkten Nutzen haben. Die erlernten Techniken können jedoch als Leitfaden dienen, wenn Sie tatsächlich eine Notwendigkeit haben, die for-Schleife einzusetzen.

Jetzt, da Sie eine Vorstellung davon haben, wie die for-Schleife funktioniert, ist es an der Zeit zu sehen, wie alles zusammenkommt, indem Sie grundlegenden Code verwenden.

Abrufen einer Zahlenfolge

Der folgende Code gibt den String "Ich zähle $num" wiederholt auf der Konsole aus, beginnend bei 1, bis der Wert von $num 10 erreicht.

for ($num = 1 ; $num -le 10 ; $num++){    "I count $num"}

Wenn Sie den obigen Code kopieren und in Ihrer PowerShell-Sitzung einfügen, um ihn auszuführen, zeigt Ihnen der folgende Screenshot das Ergebnis.

For loop example to display numbers less than 10

Zeichenketten verketten

Die For-Schleife ist nicht nur auf mathematische Ausdrücke wie Addition, Subtraktion oder Multiplikation beschränkt. Sie kann auch verwendet werden, um Zeichenkettenwerte zu verketten.

Das folgende Beispiel wiederholt den Buchstaben „x“ und fügt jeder Zeile einen weiteren Buchstaben hinzu, bis die Anzahl der Zeichen in der Zeile 30 erreicht.

Wie Sie sehen können, wurde der Wert von $x mit '' initialisiert, das keine Zeichen enthält. Die Grenze basiert auf der Bedingung, dass die Anzahl der Zeichen im Wert von $x 30 erreicht. Nach jeder Iteration wird dem Wert von $x ein weiterer Buchstabe „x“ angehängt.

for ($x='' ;$x.length -le 30;$x=$x+'x'){
    Write-Host $x
    Start-Sleep -Milliseconds 20
}

Die Ausgabe unten zeigt das erwartete Ergebnis, wenn der obige Code in PowerShell ausgeführt wird.

String concatenation example using For Loop

Zeichenketten mit mehreren Anfangs- und Wiederholungsausdrücken verketten

Die Platzhalter Anfang und Wiederholung in der For-Schleife können mehrere Ausdrücke enthalten.

Mit dem Code aus dem vorherigen Beispiel kann der Code so modifiziert werden, dass ein neuer Ausdruck im Wiederholungsplatzhalter hinzugefügt wird, um eine zufällige Farbe auszuwählen. Die zufällige Farbe wird dann als Vordergrundfarbe der Zeichenkette verwendet, die in der Konsole angezeigt wird.

Wie in der ersten Zeile zu sehen ist, wird ein Array mit Farbnamen definiert. Die For-Schleifenoperation wählt zufällig einen Farbnamen aus diesem Array aus.

Beachten Sie, dass die Platzhalter Anfang und Wiederholung jetzt zwei Ausdrücke enthalten. Jeder Ausdruck ist in Klammern eingeschlossen und durch ein Komma getrennt.

$colors = @("Green","Cyan","Red","Magenta","Yellow","White")
for (($x=''),($fgcolor = $colors | Get-Random) ;$x.length -le 30;($x=$x+'x'),($fgcolor = $colors | Get-Random)){
    Write-Host $x -ForegroundColor $fgcolor
    Start-Sleep -Milliseconds 20
}

Nachdem der modifizierte Code in PowerShell ausgeführt wurde, wird das erwartete Ergebnis wie unten gezeigt angezeigt.

String concatenation example using For Loop

Fortschritt anzeigen

Die häufigste Verwendung einer For-Schleife besteht darin, Fortschrittsanzeigen anzuzeigen. Dies wird hauptsächlich verwendet, wenn Aufgaben für Massenobjekte ausgeführt werden, die möglicherweise viel Zeit in Anspruch nehmen. Zum Beispiel das Erstellen eines Berichts über alle Postfachgrößen in Ihrer Exchange-Organisation oder das Aktualisieren von Attributen mehrerer Benutzer in der Active Directory.

Der folgende Beispielcode zeigt Ihnen die grundlegende Methode, um den Fortschritt von 1 bis 100% anzuzeigen. Wie Sie sehen werden, ist der anfängliche Wert des $counter 1, und die Bedingung besagt, dass diese Schleife ausgeführt wird, bis der Wert von $counter 100 erreicht.

for ($counter = 1; $counter -le 100; $counter++ )
{
		# FÜGEN SIE IHREN CODE HIER EIN
    Write-Progress -Activity "Update Progress" -Status "$counter% Complete:" -PercentComplete $counter;
}

Wenn Sie den obigen Code in PowerShell ausführen, sollten Sie eine ähnliche Ausgabe wie unten gezeigt sehen.

Progress counter driven by for loop

Einen Countdown-Timer anzeigen

Der folgende Code zeigt, wie die For-Schleife verwendet wird, um einen Countdown-Timer anzuzeigen. Dieser Countdown-Timer zeigt nur die verbleibenden Sekunden ab 10 an.

Wenn Sie die Startzahl ändern möchten, müssen Sie nur den Wert der Variable $seconds im Platzhalter Initial ändern.

for ($seconds=10; $seconds -gt -1; $seconds--) {
    Write-Host -NoNewLine ("`rseconds remaining: " + ("{0:d4}" -f $seconds))
    Start-Sleep -Seconds 1
}

Das Ausführen des obigen Codes in PowerShell führt zu der unten gezeigten Beispielausgabe.

A countdown timer that is driven by for loop

Einen Countdown-Timer anzeigen (verschachtelte For-Schleife)

Was ist, wenn Sie den Countdown-Timer im Format Minuten:Sekunden anzeigen möchten? Die verschachtelte for-Schleife kann dies erreichen. Eine verschachtelte for-Schleife ist einfach definiert als eine for-Schleife innerhalb einer anderen for-Schleife und so weiter.

Der untenstehende Beispielcode enthält zwei for-Schleifen.

Die erste for-Schleife behandelt den Countdown des Minuten-Teils des Timers. Wie Sie sehen können, gibt es eine $minutes-Variable vor der for-Schleife, in der Sie die Anzahl der Minuten angeben müssen, von denen die for-Schleife herunterzählt.

Die zweite for-Schleife behandelt den Countdown des Sekunden-Teils des Timers. Nach jeder Iteration pausiert die Schleife für 1 Sekunde, bevor sie fortgesetzt wird. Dies geschieht, bis der Wert von $seconds 0 erreicht.

# Legen Sie die Anzahl der Minuten fest, von denen heruntergezählt werden soll
$minutes = 1

for ($minutes--; $minutes -gt -1; $minutes--)
{
    for ($seconds = 59 ; $seconds -gt -1 ; $seconds--)
    {
        $remaining = ("{0}:{1}" -f ("{0:d4}" -f $minutes),("{0:d2}" -f $seconds))
        Write-Host "`r$remaining" -NoNewline
        Start-Sleep -Seconds 1
    }
}

Wenn der obige Code ausgeführt wird, sieht der Countdown-Timer folgendermaßen aus:

A Countdown timer using nested for loop

Bestimmung einer Primzahl

PowerShell for-Schleife ist auch eine gute Wahl für mathematische Operationen. In diesem Beispiel wird die for-Schleife verwendet, um festzustellen, ob eine gegebene Zahl eine Primzahl ist.

A prime number is a number that is only divisible by 1 and N, where N is the number itself. For example, if the value of N is 7, then N divided by 1 is 7 divided by 1.

Das folgende Skript führt beim Ausführen folgende Aktionen aus:

  • Aufforderung zur Eingabe einer Zahl durch den Benutzer.
  • Durchführung der Division unter Verwendung der Eingabezahl als Dividende, wobei die Divisoren die Zahlen von 2 bis zur Eingabezahl minus 1 sind. Dies bedeutet, dass bei einem Eingabewert von 7 die Divisoren 2, 3, 4, 5 und 6 sind.
  • Wenn der Quotient eine ganze Zahl ist, bedeutet dies, dass die Eingangsnummer keine Primzahl ist und die for-Schleife beendet wird.
  • Wenn der Quotient keine ganze Zahl ist, bedeutet dies, dass die Eingangsnummer eine Primzahl ist.

Kopieren Sie dieses Skript und speichern Sie es als isPrime.ps1.

$num = Read-Host "Input a number"

$isPrime = $true
for ($y = 2 ; $y -lt $num ; $y++ )
{
    if (($num / $y) -is [int]) {
        Write-Host "$num is not a prime number"
        $isPrime = $false
        break
    }
}

if ($isPrime -eq $true) {
    Write-Host "$num is a prime number"
}

Nachdem Sie das Skript isPrime.ps1 gespeichert haben, führen Sie es in PowerShell aus, um es zu testen. Zur Veranschaulichung finden Sie unten die Beispielausgabe.

Using for loop in a script to determine a prime number

Zusammenfassung

Die PowerShell for-Schleife birgt keine Überraschungen im Vergleich zur Funktionsweise der for-Schleife in anderen Sprachen – das erleichtert die Anpassung, wenn Sie mit dem Konzept nicht vertraut sind.

In diesem Artikel haben Sie die Grundlagen der PowerShell for-Schleifen-Anweisung gelernt. Sie haben die Syntax, Logik, den Ablauf und sogar anhand mehrerer Beispiele gelernt, wie Sie sie für verschiedene Zwecke verwenden können.

Denken Sie daran, dass es unfair ist zu sagen, dass ein Schleifentyp in PowerShell besser ist als der andere. Es hängt alles vom Zweck des Codes und der Vorliebe desjenigen ab, der den Code schreibt.

Mit dem Wissen, das Sie aus diesem Artikel gewonnen haben, sollten Sie in der Lage sein, Möglichkeiten zu finden, die for-Schleife häufiger zu verwenden, um Ihre üblichen mühsamen Aufgaben zu automatisieren.

Weiterführende Informationen

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