Alexander Limbach - stock.adobe.

Mit diesen vier Befehlen erstellen Sie PowerShell-Schleifen

Mit Schleifen in PowerShell können Sie langwierige Prozesse automatisieren und somit konsistente Ergebnisse sicherstellen. Wir erklären die vier wichtigsten Befehle dafür.

Mit Schleifen können IT-Administratoren Aufgaben in PowerShell automatisch wiederholen, ohne Befehle mehrfach schreiben zu müssen. Sie können PowerShell in einer Schleife entweder anweisen, jedes Element eines Arrays zu durchlaufen oder eine Bedingung für das Beenden der Schleife angeben.

PowerShell ist nicht nur eine Skriptsprache, sondern auch ein praktisches Automatisierungs-Tool für Konfigurationen, Überwachung und andere Aufgaben in Windows-Umgebungen. Das Einrichten von Schleifen, wie wir es in diesem Text beschreiben, hilft als Form der Automatisierung Administratoren dabei, Einstellungen konsistent zu halten.

Werfen wir einen kurzen Blick auf die vier Haupttypen von Schleifen in PowerShell:

foreach

foreach-object

while

do-while

Foreach

Mit einer foreach-Schleife können Administratoren das Skript ein Array durchlaufen lassen und den Variablennamen für jedes Element spezifizieren. Der folgende Code befielt beispielsweise PowerShell, alle Unterverzeichnisse auszugeben und die darin befindlichen Dateien aufzulisten:

$directories = Get-ChildItem -Directory

foreach ($directory in $directories) {

    Get-ChildItem $directory -File

}

Fügen Sie nach foreach die Variable ein, mit der Sie auf jedes Element im Array verweisen möchten, gefolgt von in und dann dem Array selbst. Sie sollten dabei ein Nomen im Singular für die Variable und ein Nomen im Plural für das Array verwenden. Diese Konvention erleichtert das Lesen und Verstehen von Code.

Foreach-Object

Eine Foreach-Object-Schleife bewirkt dasselbe wie eine foreach-Schleife, verwendet dafür aber die Pipeline. Das gleiche Beispiel wie zuvor würde demnach folgendermaßen aussehen:

Get-ChildItem -Directory | ForEach-Object {Get-ChildItem $_ -File}

Statt $directory zu verwenden, mit dem Sie in jeder Iteration auf das Element verweisen, setzen Sie die integrierte $_-Variable. Alternativ nutzen Sie $PSItem anstelle von $_.

Wenn Sie Befehle interaktiv ausführen, ist Foreach-Object normalerweise die bessere Wahl – insbesondere, wenn Sie den %-Alias verwenden möchten. In Skripten ist eine foreach-Schleife jedoch expliziter und Sie können somit verschachtelte Schleifen erstellen.

While

Die PowerShell-Schleife while führt einen Codeblock aus, solange eine bedingte Anfrage true zurückgibt. Ein Beispiel: Ein Onboarding-Skript für neue Azure-Active-Directory-Benutzer soll eine Lizenz hinzufügen, um ein Exchange-Online-Postfach zu aktivieren. Später soll das Skript bestimmte Einstellungen auf das Postfach anwenden – das geht natürlich erst, wenn es eingerichtet ist. Somit muss das Skript wiederholt anfragen, ob Exchange Online bereitgestellt ist. Das könnte ungefähr so aussehen:

$upn = '[email protected]'

while (-not ($mbx = Get-EXOMailbox $upn -ErrorAction SilentlyContinue)) {

    Start-Sleep -Seconds 60

}

# Befehle für Einstellungen an $mbx

Solange das Postfach $upn nicht existiert, gibt es einen Fehler zurück, der Parameter -not wertet die Anweisung als true und die Schleife wird fortgesetzt.

Beachten Sie, dass PowerShell die bedingte Anweisung auswertet, bevor es den Code in der while-Schleife ausführt. Ergibt die Auswertung false, wird die while-Schleife gestoppt.

Do-While

Eine do-while-Schleife ähnelt einer while-Schleife, mit dem wichtigen Unterschied, dass PowerShell in diesem Fall den Code innerhalb der do-Schleife immer mindestens einmal ausführt. Danach erst wertet es die bedingte Anweisung – while – aus, um zu sehen, ob es die do-Schleife verlassen soll.

Wir kehren zum Beispiel für unsere while-Schleife oben zurück und verwenden do-while.

$upn = '[email protected]'

do {

    Start-Sleep -Seconds 60

} while (-not ($mbx = Get-EXOMailbox $upn -ErrorAction SilentlyContinue))

# Befehle für Einstellungen an $mbx

Dieser Code führt zum gleichen Endergebnis: PowerShell wartet, bis das Postfach bereitgestellt ist, bevor es fortfährt. Es ruht außerdem 60 Sekunden lang, bevor es erneut testet, ob das Postfach vorhanden ist.

Erfahren Sie mehr über Data-Center-Betrieb