Zum Inhalt springen

Verzweigungen: if und switch

Core
Lernziele
  • Mit if/elseif/else und switch Entscheidungen im Skript treffen

In PowerShell kannst du durch Verzweigungen und Kontrollstrukturen den Ablauf deiner Skripte steuern. Die am häufigsten genutzten Strukturen sind if/else-Anweisungen für einfache Bedingungen und switch-Anweisungen für komplexe Vergleiche und Mehrfachentscheidungen. Diese Mechanismen ermöglichen es dir, Entscheidungen zu treffen, basierend auf den Werten von Variablen oder Ergebnissen von Befehlen.

Mit if/else-Anweisungen führst du bedingte Prüfungen durch. Der grundlegende Aufbau sieht so aus:

Terminal-Fenster
if (<Bedingung>) {
# Code, der ausgeführt wird, wenn die Bedingung wahr ist.
} elseif (<andere Bedingung>) {
# Code, der ausgeführt wird, wenn die erste Bedingung falsch, die zweite aber wahr ist.
} else {
# Code, der ausgeführt wird, wenn keine der obigen Bedingungen zutrifft.
}
Terminal-Fenster
$zahl = 7
if ($zahl -gt 10) {
Write-Output "Die Zahl ist größer als 10."
} elseif ($zahl -eq 10) {
Write-Output "Die Zahl ist gleich 10."
} else {
Write-Output "Die Zahl ist kleiner als 10."
}
Terminal-Fenster
$name = "Alice"
if ($name -eq "Bob") {
Write-Output "Hallo Bob!"
} else {
Write-Output "Du bist nicht Bob, sondern $name."
}
  • Klar strukturieren:
    Nutze Einrückungen und Kommentare, um den Code lesbar zu gestalten.
  • Bedingungen präzise formulieren:
    Verwende aussagekräftige Vergleiche (z. B. -eq, -lt, -gt), um Missverständnisse zu vermeiden.
  • Vermeide zu tiefe Verschachtelungen:
    Extrahiere komplexe Bedingungen in eigene Variablen oder Funktionen, um die Lesbarkeit zu erhöhen.

Die switch-Anweisung ist ideal, wenn du einen Wert gegen mehrere mögliche Fälle überprüfen möchtest. PowerShells switch unterstützt auch reguläre Ausdrücke und Wildcard-Vergleiche.

Terminal-Fenster
switch (<Ausdruck>) {
<Wert1> {
# Code, wenn <Ausdruck> gleich <Wert1> ist.
break
}
<Wert2> {
# Code, wenn <Ausdruck> gleich <Wert2> ist.
break
}
default {
# Code, wenn keiner der oben genannten Fälle zutrifft.
}
}
Terminal-Fenster
$tag = "Dienstag"
switch ($tag) {
"Montag" {
Write-Output "Start in die Woche."
break
}
"Dienstag" {
Write-Output "Zweiter Tag der Woche."
break
}
"Freitag" {
Write-Output "Fast Wochenende!"
break
}
default {
Write-Output "Ein anderer Tag der Woche."
}
}

Beispiel 2: switch mit Wildcards und regulären Ausdrücken

Abschnitt betitelt „Beispiel 2: switch mit Wildcards und regulären Ausdrücken“

Mit dem Parameter -Wildcard oder -Regex kannst du flexiblere Vergleiche durchführen:

Terminal-Fenster
$filename = "report_2025.txt"
switch -Wildcard ($filename) {
"*.txt" {
Write-Output "Es handelt sich um eine Textdatei."
break
}
"*.csv" {
Write-Output "Es handelt sich um eine CSV-Datei."
break
}
default {
Write-Output "Unbekannter Dateityp."
}
}
  • Verwende den default-Zweig:
    Stelle sicher, dass für Fälle, die nicht explizit behandelt werden, ein Standardcode ausgeführt wird.
  • Nutze break:
    Verwende break, um zu verhindern, dass nachfolgende Blöcke unnötig ausgeführt werden.
  • Spezifiziere den Vergleichstyp:
    Nutze bei Bedarf -Wildcard oder -Regex, um den Vergleich an deine Anforderungen anzupassen.

Für einfache Entweder-oder-Zuweisungen gibt es in PowerShell 7 eine Kurzform:

Terminal-Fenster
$status = (Get-Service -Name Spooler).Status -eq 'Running' ? 'läuft' : 'gestoppt'

In Windows PowerShell 5.1 steht dieser Operator nicht zur Verfügung. Nutze dort if/else.

  • if/else:
    Ermöglichen die Auswertung einzelner Bedingungen und das Durchführen von unterschiedlichen Codepfaden basierend auf den Ergebnissen.
  • switch:
    Erlaubt die Überprüfung eines Ausdrucks gegen mehrere Fälle und unterstützt dabei flexible Vergleiche mit Wildcards und regulären Ausdrücken.
  • Best Practices:
    Strukturierter Code, klare Bedingungen und der Einsatz von Standardzweigen (default) machen deine Verzweigungslogik robust und wartbar.

Diese Kontrollstrukturen sind fundamentale Bausteine in PowerShell, die dir helfen, den Programmfluss dynamisch zu steuern und auf unterschiedliche Situationen zu reagieren.