⚡ Skripting & Error-Handling

PS 05: Kontrollfluss & Moderne PS7 Operatoren

Meistere klassische Verzweigungen, mächtige switch -Regex Matches und die modernen PowerShell 7+ Operatoren (Ternary ?:, Null-Coalescing ??, Pipeline-Chaining && / ||).

💡 1. Vergleichsoperatoren & if/else

PowerShell verwendet keine Symbole wie == oder !=, sondern textuelle Vergleichsoperatoren:

# Vergleichsoperatoren in PowerShell:
# -eq (Gleich)       -ne (Ungleich)
# -gt (Größer)       -lt (Kleiner)
# -ge (Größer-Gleich) -le (Kleiner-Gleich)
# -like (Wildcards *) -match (Reguläre Ausdrücke)
# -in / -contains    -and / -or / -not

$port = 8080
if ($port -ge 1024 -and $port -le 49151) {
    "Gültiger User-Port"
} elseif ($port -lt 1024) {
    "Privilegierter System-Port"
} else {
    "Dynamischer / Privater Port"
}

🚀 2. Exklusive PowerShell 7+ Operatoren

PowerShell 7 führt elegante Sprach-Features ein, die Skripte drastisch verkürzen und lesbarer machen:

# 1. Ternärer Operator (Bedingung ? Wahr-Wert : Falsch-Wert):
$statusText = $serviceIsRunning ? "ONLINE" : "OFFLINE"

# 2. Null-Coalescing Operator (??):
# Liefert den linken Wert, oder den rechten, falls links $null ist:
$timeout = $customTimeout ?? 30

# 3. Null-Conditional Assignment (??=):
$configPath ??= "/etc/defaults.conf" # Weist nur zu, wenn $configPath $null ist

# 4. Pipeline-Chaining (&& und ||):
# && führt den nächsten Befehl nur bei Erfolg aus ($? -eq $true)
# || führt den nächsten Befehl nur bei Misserfolg aus ($? -eq $false)
Test-Connection "1.1.1.1" -Count 1 && Write-Host "Online" || Write-Host "Offline"
⚡ Didaktische Analogie: Der Null-Coalescing Sicherheitsgurt

Der ?? Operator ist wie ein Rettungsanker in einer Kaskade: Suchst du eine Konfiguration, prüfst du zuerst Benutzereinstellungen, dann Systemvariablen und greifst erst im Notfall auf den Standard-Fallback zu: $user ?? $system ?? "Default". Sauber, kurz und null-safe!

🔀 3. Das Super-Werkzeug: switch -Regex

Die switch-Anweisung in PowerShell ist weitaus mächtiger als in anderen Sprachen. Mit dem Schalter -Regex kannst du komplexe Muster mit automatischer Match-Gruppe abgleichen:

$logLine = "ERR-404: Not Found"

switch -Regex ($logLine) {
    "^ERR-(\d+)" {
        $errorCode = $Matches[1]
        "Fehlercode erkannt: $errorCode"
        break
    }
    "^WARN" {
        "Warnung erkannt"
        break
    }
    default {
        "Unbekanntes Protokoll-Format"
    }
}

📑 4. Cheat-Sheet: Moderne Operatoren

Operator / Feature Syntax Verhalten
Ternary $a ? $b : $c Kompaktes Inline-if-else.
Null-Coalescing $val ?? "Default" Fallback bei $null.
Pipeline-AND Cmd1 && Cmd2 Cmd2 wird nur bei Erfolg von Cmd1 ausgeführt.
Pipeline-OR Cmd1 || Cmd2 Cmd2 wird nur bei Fehler in Cmd1 ausgeführt.
switch -Regex switch -Regex ($str) { ... } Mustererkennung mit Regex & automatischer $Matches Variable.

🎯 Aufgaben & Checkliste in aufgabe.ps1

💻 In Web-IDE öffnen → ← Zurück zu PS 04 Weiter zu PS 06 →