PowerShell-Grundlagen: Programmieren mit Schleifen

In diesem PowerShell-Tutorial zeigen wir Ihnen, wie Sie die For-Schleife, die ForEach-Object-Schleife und die While-, Do-While- und Do-Until-Schleifen verwenden.

PowerShell-Schleifen wiederholen in ihrer einfachsten Form einfach dieselbe Reihe von Befehlen eine bestimmte Anzahl von Malen. Schleifen sind ideal für die Ausführung konsistenter Aktionen für einen bestimmten Zeitraum oder eine bestimmte Anzahl von Datensätzen und können Ihre Skripte erheblich vereinfachen. Insbesondere PowerShell verfügt über eine Reihe von Cmdlets – vor allem solche, die mit dem Verb „Get“ beginnen -, die Objekte zurückgeben, die eine große Anzahl ähnlicher Daten enthalten.

Es gibt mehrere Arten von Schleifen in PowerShell, und in vielen Fällen kann mehr als eine Schleifentechnik effektiv verwendet werden. Manchmal ist es erforderlich, den effizientesten Schleifentyp zu bestimmen, entweder aus Sicht der Leistung oder der Lesbarkeit des Codes.

ForEach-Object-Schleife

In vielen Fällen ist die Verwendung des Cmdlets „ForEach-Object“ (zuvor in unserem Artikel über das Arbeiten mit PowerShell-Objekten besprochen) die beste Möglichkeit, eine Schleife durch ein Objekt zu ziehen. In seiner einfachsten Form benötigt ForEach-Object nur ein Objekt, das in einer Schleife durchlaufen werden soll, und einen Skriptblock, der die Befehle enthält, die für jedes Element des Objekts ausgeführt werden sollen.
Diese Parameter können entweder durch die Parameternamen „-InputObject“ und „-Process“ angegeben werden, oder indem das Objekt über die Pipeline an das Cmdlet „ForEach-Object“ übergeben und der Skriptblock als erster Parameter platziert wird. Zur Veranschaulichung dieser grundlegenden Syntax zeigt das folgende Beispiel zwei Methoden zur Verwendung von ForEach-Object zum Durchlaufen des Inhalts des Ordners „Dokumente“ eines Benutzers in einer Schleife:

$myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File
$myDocuments | ForEach-Object {$_.FullName}
ForEach-Object -InputObject $myDocuments -Process {$_.FullName}

In bestimmten Szenarien kann es von Vorteil sein, eine oder mehrere Aktionen kurz vor oder kurz nach der Ausführung der Schleife durchzuführen. Die Parameter -Begin und -End können verwendet werden, um Skriptblöcke zu definieren, die direkt vor oder nach dem Inhalt des Skriptblocks -Process ausgeführt werden. Dies kann verwendet werden, um eine Variable vor oder nach der Ausführung der Schleife zu setzen oder zu ändern.

ForEach-Object hat zwei Aliase, ForEach und %, und unterstützt ab PowerShell 3.0 auch eine Kurzsyntax. Die folgenden drei Beispiele sind in ihrer Funktion identisch.

Get-WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace}
Get-WMIObject Win32_LogicalDisk | % FreeSpace

PowerShell For Loop

For-Schleifen werden in der Regel verwendet, um eine Reihe von Befehlen eine bestimmte Anzahl von Malen zu durchlaufen, entweder, um ein Array oder ein Objekt zu durchlaufen, oder einfach, um denselben Codeblock bei Bedarf zu wiederholen. Eine For-Schleife wird konstruiert, indem der Wert einer Variablen beim Eintritt in die Schleife festgelegt wird, die Bedingung, bei der die Schleife beendet werden soll, und eine Aktion, die bei jedem Durchlauf der Schleife für diese Variable ausgeführt werden soll.

Das folgende Beispiel zeigt eine einfache For-Schleife, die zum Erstellen einer Multiplikationstabelle verwendet wird:

For ($i=0; $i -le 10; $i++) {
„10 * $i = “ + (10 * $i)
}

For-Schleifen können verwendet werden, um schrittweise durch Array-Werte zu gehen, indem der Anfangswert auf den Anfangsindex des Arrays gesetzt und der Wert schrittweise erhöht wird, bis die Array-Länge erreicht ist. Der Array-Index wird angegeben, indem die inkrementierte Variable innerhalb eckiger Klammern direkt nach dem Variablennamen platziert wird, wie im folgenden Beispiel gezeigt:

$colors = @(„Red“, „Orange“, „Yellow“, „Green“, „Blue“, „Indigo“, „Violet“)
For ($i=0; $i -lt $colors.Length; $i++) {
$colors
}

While-, Do-While- und Do-Until-Schleifen

Ein dritter Schleifentyp, den PowerShell unterstützt, beinhaltet das Festlegen einer Bedingung, die die Schleife entweder so lange verarbeiten lässt, wie die Bedingung wahr ist, oder bis sie erfüllt ist. While- und Do-While-Schleifen werden beide verwendet, um eine Aktion auszuführen, während die Bedingung zu $true ausgewertet wird, und unterscheiden sich nur in ihrer Syntax. Do-Until-Schleifen haben eine ähnliche Syntax wie Do-While, stoppen aber die Verarbeitung, sobald die Bedingung erfüllt ist.

Do-While- und Do-Until-Schleifen beginnen beide mit dem Do-Schlüsselwort, das einem Skriptblock vorangestellt wird, gefolgt vom Bedingungsschlüsselwort (While oder Until) und der Bedingung. Als Beispiel funktionieren die folgenden beiden Schleifen identisch, nur die Bedingung ist vertauscht:

$i=1
Do {
$i
$i++
}
While ($i -le 10)

$i=1
Do {
$i
$i++
}
Until ($i -gt 10)

While-Schleifen verhalten sich identisch zu Do-While-Schleifen, nur die Syntax ist leicht abgeändert. While-Schleifen verwenden nur das Schlüsselwort While, gefolgt von der Bedingung und schließlich dem Skriptblock. Diese Schleife ist in ihrer Funktion identisch mit den vorangegangenen Beispielen und verwendet die gleiche Bedingung wie die Do-While-Schleife:

$i=1
While ($i -le 10)
{
$i
$i++
}

Jeder dieser drei Schleifentypen – Do-While-, Do-Until- und While-Schleifen – kann auch für eine unendliche Schleife verwendet werden; While- und Do-While-Schleifen, bei denen die Bedingung auf $true gesetzt ist, und Do-Until, bei denen die Bedingung auf $false gesetzt ist.

In manchen Situationen kann es erforderlich sein, eine Schleife aufgrund einer anderen Bedingung als der Schleifenbedingung vorzeitig zu verlassen. In diesem Fall kann das Break-Schlüsselwort aufgerufen werden, um die Schleife zu verlassen. Dieses letzte Beispiel zeigt die gleiche Funktionalität, verwendet aber eine Endlosschleife und das Schlüsselwort Break, um die Schleife zum richtigen Zeitpunkt zu verlassen:

$i=1
While ($true)
{
$i
$i++
if ($i -gt 10) {
Break
}
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.