⚡ Skripting & Error-Handling

PS 06: Schleifen (foreach, while & Pipeline)

Verstehe die Leistungsunterschiede zwischen Sprach-Schleifen (foreach) und Pipeline-Streaming (ForEach-Object) sowie while, do..until und Schleifensteuerung.

💡 1. foreach Statement vs. ForEach-Object Pipeline

In PowerShell gibt es zwei Hauptarten, Sammlungen zu durchlaufen – jede mit klaren Stärken:

Merkmal foreach ($x in $liste) $liste | ForEach-Object { }
Typ Sprach-Statement (Keyword) Cmdlet (Pipeline-Streaming)
Speicherverbrauch Lädt gesamte Sammlung in den RAM Niedrig: Streamt Objekt für Objekt (One-at-a-time)
Ausführungsgeschwindigkeit ⚡ Extrem schnell für Daten im Speicher Etwas langsamer durch Pipeline-Overhead
Verwendung Lokale Arrays, komplexe Algorithmen Große Datenströme (Dateien, APIs, Logs)
🔄 Didaktische Analogie: Badewanne vs. Wasserhahn

foreach (Sprach-Schleife): Füllt erst die gesamte Badewanne mit Daten, bevor du mit dem Baden beginnst. Braucht viel Platz, ist aber blitzschnell zugänglich.
ForEach-Object (Pipeline): Dreht den Wasserhahn auf und verarbeitet jeden einzelnen Tropfen, sobald er herausfließt. Perfekt für riesige Logdateien, die nicht in deinen RAM passen!

⚙️ 2. Die drei Phasen von ForEach-Object

Das Cmdlet ForEach-Object unterstützt die drei klassischen PowerShell-Lifecycle-Blöcke:

1..10 | ForEach-Object -Begin {
    $sum = 0
    Write-Host "Initialisierung..."
} -Process {
    $sum += $_
} -End {
    Write-Host "Gesamtsumme: $sum"
}

🔁 3. Bedingte Schleifen: while, do..while & do..until

Nutze do..until für Retry-Muster, die mindestens einmal ausgeführt werden und laufen, bis eine Bedingung $true wird:

# Retry-Schleife mit do..until:
$versuche = 0
$maxVersuche = 3
$erfolgreich = $false

do {
    $versuche++
    # Simuliere Aktion...
} until ($erfolgreich -or $versuche -ge $maxVersuche)

# Schleifensteuerung mit break und continue:
foreach ($item in 1..10) {
    if ($item % 2 -ne 0) { continue } # Überspringe Ungerade
    if ($item -gt 6) { break }        # Beende bei > 6
    Write-Host "Gerade Zahl: $item"
}

📑 4. Cheat-Sheet: Schleifen-Konstrukte

Schleife Syntax Besonderheit
foreach foreach ($x in $col) { } Sehr schnell, speicherintensiv.
ForEach-Object $col | ForEach-Object { } Objekt-Streaming in der Pipeline.
do..until do { } until ($cond) Läuft bis Bedingung wahr wird (mind. 1 Durchlauf).
while while ($cond) { } Prüft Bedingung VOR dem ersten Durchlauf.
break / continue break / continue Sofortiger Abbruch bzw. Sprung zur nächsten Iteration.

🎯 Aufgaben & Checkliste in aufgabe.ps1

💻 In Web-IDE öffnen → ← Zurück zu PS 05 Weiter zu PS 07 →