4. Dezember 2018 Aleksej Kusnir

PowerShell Schleifen einfach erklärt: Foreach, For, While

Sie möchten wissen, wie Sie die wichtigsten PowerShell Schleifen bestmöglich in der Praxis verwenden?

Mit diesem Beitrag möchten Ich Ihnen zeigen, wie Sie PowerShell schleifen für eine Aufgabe auswählen und diese dann anwenden.

Des Weiteren zeige Ich Ihnen, wie Sie diese Schleifen dann in der Praxis in einem PowerShell Skript verwenden und entsprechend anpassen können.

Bevor wir jedoch direkt mit der Praxis beginnen, vorab eine kleine theoretische Einleitung, die wichtig für das Verständnis von Schleifen ist.

Was ist eine Schleife?

Eine Schleife, wie der Name schon sagt, ist in der Programmierung eine Methode, einen bestimmten Wert zu überprüfen und daraufhin eine Entscheidung zu treffen und einen Befehl auszuführen.

Mit Schleifen haben wir die Möglichkeit in PowerShell Skripten Logik reinzubringen.

In PowerShell gibt es viele verschieden Schleifen, die wichtigsten sind meiner Meinung nach die if, for, foreach und die while Schleife.

Jeder dieser Schleifen hat seinen Zweck und seine Vorteile.

Nun gehen wir in den nächsten Kapiteln drauf ein, wie Sie diese Schleifen in PowerShell einsetzen können.

Logik mit PowerShell Schleifen

Damit wir eine PowerShell Schleife steuern können, benötigen wir eine Logik. 

Die Logik wird durch die Vergleichsoperatoren aus der Programmierung ermöglicht.

Anbei sind die Vergleichsoperatoren beschrieben, die wir auch in den nächsten Schleifen verwenden.

Welche Schleifen verwenden wir in PowerShell?

Nun lassen Sie uns gemeinsam die einzelnen Schleifen kennenlernen und diese in der Praxis anwenden.

If Else

Zweck

  • Die if else ist eigentlich keine Schleife, sondern ein Abfragemechanismus. Diese Art der Abfrage wird aber oft in Schleifen verwendet, deswegen habe ich diese ebenfalls hier aufgenommen.
  • Die if else Abfrage überprüft einen bestimmten Wert und wenn dieser Zutrifft, wird dann z.B. Befehl X ausgeführt.
  • Wenn der Wert aber nicht stimmt, dann greift die "else" Methode und führt Befehl Y aus.

Syntax

  • if($WertA -lt $WertB) { Dann führe Befehl X aus. } else { Dann führe Befehl Y aus. }
  • Wenn WertA kleiner ist als WertB, dann wird Befehl X ausgeführt.
  • Wenn WertA größer oder gleich WertB ist, dann wird Befehl Y ausgeführt.

For

Zweck

  • Die for Schleife führt einen bestimmten Befehl aus, bis ein bestimmter Wert, bzw. Situation gegeben ist.
  • Dabei fragt die For Schleife nach jedem Durchlauf ab ob der Zustand sich verändert hat.
  • Die For Schleife benötigt einen Anfang- und ein Endwert

Syntax

  • for($WertA=0;$WertA -lt $WertB;$WertA++) { Führe Befehl aus}
  • Die Schleife beginnt mit dem Wert 0.
  • Die Schleife widerholt sich solange bis WertA kleiner als WertB ist.
  • Bei jedem Durchlauf der Schleife wird der Wert WertA um 1 erhöht. Das erreichen wir im dem wir $WertA++ schreiben.

While

Zweck

  • Die while Schleife ähnelt der for Schleife, wobei bei der while Schleife der Anfang nicht festgelegt sein muss.
  • Die while Schleife wiederholt sich solange, bis ein bestimmter Wert übereinstimmt.

Syntax

  • while($WertA -lt $WertB) { Führe Befehl aus}
  • Die Schleife beginnt mit dem Wert 0.
  • Man merkt, der Befehl ist ziemlich kurz, aber er hat es in sich. Damit kann man schnell auch ein loop bauen, um ein System zum Absturz zu bringen.
  • Beispiel: Nehmen wir mal an, Sie haben eine Textliste, wo Sie nicht genau wissen, wieviel Zeilen diese beinhaltet. Sie möchten aber alle Zeilen bearbeiten, bis keine mehr da sind. Dann währe eine while Schleife super für diese Aufgabe.

Foreach

Zweck

  • Die foreach Schleife ist wunderbar um Objekte in Arrays zu bearbeiten.
  • Mit der foreach Schleife können Sie jedes Objekt in einem Array anschauen und analysieren.

Syntax

  • foreach($objekt in $objektarray) { Führe Befehl aus}
  • Wenn z.B. im Array $objektarray 10 Objekte enthalten sind, dann wird jedes Objekt, in das Attribut $objekt geschrieben und die Schleife beginnt.
  • In der Schleife kann dann das Attribut $objekt bearbeitet werden.
  • Beispiel: $objektarray=Get-Process. Mit diesem Befehl würden alle Windows Prozesse als Array in das Attribut $objektarray gespeichert. Nun können wir mit der foreach Schleife jeden Prozess einzeln anschauen und bearbeiten.

Das war jetzt viel Theorie, die aber sehr wichtig für das allgemeine Verständnis ist.

Ich möchte Ihnen nun zeigen, wie die einzelnen Schleifen in der Praxis funktionieren.

Alle if Schleifen und Skripte erstellen wir mit der PowerShell ISE. Zu der PowerShell ISE haben wir einen eigenen Artikel geschrieben, wie Sie PowerShell Scripte mit der PowerShell ISE erstellen.

If Else Schleife

Um die if Elese Schleife besser zu erklären, habe ich für uns ein Beispiel Sezenario.

Nehmen wir mal an, wir möchten bei vielen Windows Systemen überprüfen ob die C: Partition genug Speicher frei hat.

Dazu möchten wir ein PowerShell Skript schreiben, das ein Fehler ausgibt, wenn die C: Partition weniger als 20% freien Speicher zur Verfügung hat.

Wenn die C: Partition aber mehr als 20% hat, dann soll ein OK ausgegeben werden.

Das Script dazu sieht folgendermaßen aus:

$CPartition=Get-Volume -DriveLetter C 

$Prozenz=($CPartition.SizeRemaining/$CPartition.Size)*100 

if($Prozenz -lt 20) 

{ 

    Write-Host “Es sind weniger als 20% Speicherplatz verfügbar.” 

    Write-Host “Freier Speicherplatz: $Prozenz%” 

} 

else 

{ 

    Write-Host “Es ist genug Speicherplatz verfügbar.” 

    Write-Host “Freier Speicherplatz: $Prozenz%” 

}

Foreach Schleife

Die foreach Schleife zeige ich Ihnen am besten, am Beispiel von Windows Prozessen.

Wir speichern zuerst alle Windows Prozesse in ein Array.

Danach werden wir jedes Objekt (Prozess) aus diesem Arrays analysieren und z.B. den Namen des Prozesses ausgeben.

Das Skript dazu sieht folgendermaßen aus:

$WindowsProzesse=Get-Process 

foreach($Prozess in $WindowsProzesse) 

{ 

    Write-Host $Prozess.Name 

}

For Schleife

Um die for Schleife zu präsentieren, werden wir eine bestimmte Anzahl an Ordnern unter C:\Temp anlegen lassen.

Wir möchten das 10 Ordner mit dem Namen “Ordner1..10” angelegt werden und dann unter C:\Temo zu finden sind.

Das Skript dazu sieht folgendermaßen aus:

$i=1; 

for($i;$i -le 10;$i++) 

{ 

    $Ordnername=”Ordner$i” 

    New-Item -ItemType Directory -Path “C:\Temp” -Name $Ordnername 

}

While Schleife

Die while Schleife möchte Ich Ihnen am Beispiel der Druckerwarteschlange zeigen.

Nehmen wir mal an, wir brauchen ein Script das überprüft, ob der Druckerspooler gestartet ist oder nicht.

Wenn dieser nicht gestartet ist, wird eine Fehlermeldung solange ausgegeben, bis der Spooler Dienst wieder läuft.

$PSpooler=Get-Process -Name “spoolsv” 

while($PSpooler -eq $null) 

{ 

    $PSpooler=Get-Process -Name “spoolsv” 

    Write-Host “Geht nicht” 

}

So nun habe Ich Ihnen einige Beispiel gezeigt, wie Sie mit PowerShell Schleifen arbeiten können. Die Beispiele würden Sie vlt. nicht ein zu eins einsetzen, aber ich hoffe es ist klar wie diese funktionieren.

Wichtig ist, dass Sie mit den Schleifen spielen und verschiedene Szenarien, die für Sie interessant sind erstellen.

Sie wollen mehr solche Artikel von uns sehen?

Hinterlassen Sie Ihre E-Mail Adresse, damit wir Sie über neue Artikel und News informieren können.

Mit der Nutzung dieses Formulars erklären Sie sich mit der Speicherung und Verarbeitung Ihrer Daten durch diese Website einverstanden.

Fazit

Alles klar, in diesem Artikel haben Sie nun die wichtigsten Schleifen in PowerShell kennengelernt. Mit diesem Wissen können Sie schon die mächtigsten aber auch die schnellsten logischen Entscheidungen innerhalb eines PowerShell Scrips erstellen.

Vor allem in einem Skript was viele Zustände betrachten muss, werden Sie die Logik lieben lernen.

Ich wünsche Ihne viel Erfolg und Spaß beim Skripten.

Falls Sie sich weiteres Wissen in einem praktischen Präsenztraining zusätzlich aneignen möchten, besuchen Sie einfach unsere PowerShell Schulung. Wir freuen uns auf Sie!

P.S: Ich erstelle gerade passend zu diesem Thema ein Onlinekurs, mit vielen Einsteiger Tipps und Beispielen. Schau mal hier, wenn du noch tiefer und detaillierter PowerShell lernen möchtest. KLICK