🚀 Lehrpfad 3: Parallelisierung & REST-APIs

PS 09: Multithreading mit ForEach-Object -Parallel

Entfessle moderne PowerShell 7+ Concurrency mit ForEach-Object -Parallel, Thread-Scoping $using: und Start-ThreadJob.

đź“‚ Dateien dieser Einheit:
📄 aufgabe.ps1 (Startercode) 🧪 test_aufgabe.ps1 (Pester Tests) 💡 musterloesung.ps1 (Lösung) 📖 README.md

đź’ˇ 1. Moderne Parallelisierung in PowerShell 7+

Verabschiede dich von langsamen, ressourcenfressenden Prozessen! In PowerShell 7 werden parallele Pipelines direkt in extrem schnellen .NET-Runspaces (Threads) ausgefĂĽhrt.

# Parallele AusfĂĽhrung ĂĽber 8 Threads
$servers = @("srv-app01", "srv-app02", "srv-db01", "srv-web01")
$maxTimeout = 2000

$results = $servers | ForEach-Object -Parallel {
    # ⚠️ WICHTIG: Variablen aus dem Eltern-Scope müssen mit $using: angesprochen werden!
    $timeout = $using:maxTimeout
    $server  = $_

    [PSCustomObject]@{
        Host   = $server
        Status = "Online"
    }
} -ThrottleLimit 8

🛑 Früher (Windows PS 5.1): Start-Job

Erzeugte für jeden Task einen vollständigen powershell.exe-Prozess (~30-50 MB RAM je Job & hohe Startup-Latenz).

⚡ Heute (PS 7+): ForEach-Object -Parallel

FĂĽhrt Tasks in leichtgewichtigen Runspace-Threads innerhalb des Hauptprozesses aus. Bis zu 100x schneller bei minimalem RAM-Bedarf.

🏛️ 2. Architektur: Thread-Drosselung (-ThrottleLimit)

Ohne -ThrottleLimit wĂĽrden bei 1.000 Servern 1.000 Threads auf einmal starten und das System ĂĽberlasten. Mit -ThrottleLimit 5 werden immer genau 5 Worker parallel bedient:

[Pipeline Input Queue] ──▶ [ srv01, srv02, srv03, srv04, srv05, ... srv100 ]
│ (ThrottleLimit = 4 Worker Threads)
├── [Thread 1]: srv01 ──▶ [Process] ──▶ [Result 1]
├── [Thread 2]: srv02 ──▶ [Process] ──▶ [Result 2]
├── [Thread 3]: srv03 ──▶ [Process] ──▶ [Result 3]
└── [Thread 4]: srv04 ──▶ [Process] ──▶ [Result 4]
[Aggregated Output Stream] ◀── Thread-Safe PSCustomObject Collection

🎯 3. Aufgaben & Checkliste

Öffne die Datei aufgabe.ps1 und löse die 4 Aufgaben:

đź’» In Web-IDE öffnen & Pester Tests starten →