💡 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) |
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. |
🧠 Diagnostischer Selbst-Check
Überprüfe dein Verständnis zu PowerShell-Architektur, Pipeline-Mechanik und Best Practices mit gezieltem Feedback: