# PowerShell Multi-Threading Beispiel Dieses Repository enthält zwei PowerShell-Skripte, die demonstrieren, wie mehrere Ziele (URLs) parallel auf Erreichbarkeit geprüft werden können. Dabei wird sowohl eine Lösung für **Windows PowerShell 5.1** als auch für **PowerShell 7+** gezeigt. --- ## 📂 Inhalt * `Parallel-ps5.ps1` → Parallelisierung mit **Jobs** (PowerShell 5.1 kompatibel) * `Parallel.ps1` → Parallelisierung mit **ForEach-Object -Parallel** (PowerShell 7+) --- ## 🚀 Funktionsweise Beide Skripte: 1. Definieren eine Liste von URLs 2. Prüfen die Erreichbarkeit via `Test-Connection` 3. Geben das Ergebnis pro URL aus 4. Messen die Gesamtlaufzeit des Skripts --- ## 🧵 Script 1: Parallel-ps5.ps1 (Windows PowerShell 5.1) ### Beschreibung Dieses Skript verwendet **Background Jobs**, um mehrere Verbindungen parallel zu prüfen. ### Ablauf * Für jede URL wird ein `Start-Job` erstellt * Jeder Job prüft die Erreichbarkeit mit `Test-Connection` * Ergebnisse werden gesammelt mit: * `Wait-Job` * `Receive-Job` * Am Ende wird die Laufzeit berechnet ### Vorteile * Kompatibel mit Windows PowerShell 5.1 * Einfache Parallelisierung ### Nachteile * Höherer Overhead (jeder Job = eigener Prozess) * Langsamer als moderne Methoden ### Ausführung ```powershell .\Parallel-ps5.ps1 ``` --- ## ⚡ Script 2: Parallel.ps1 (PowerShell 7+) ### Beschreibung Dieses Skript nutzt die moderne Parallelisierung mit: ```powershell ForEach-Object -Parallel ``` ### Ablauf * URLs werden direkt parallel verarbeitet * Jeder Thread führt `Test-Connection` aus * Ergebnisse werden direkt ausgegeben * Laufzeit wird gemessen ### Vorteile * Deutlich schneller * Weniger Overhead als Jobs * Einfacher Code ### Voraussetzungen * PowerShell 7 oder höher ### Ausführung ```powershell pwsh .\Parallel.ps1 ``` --- ## ⏱️ Laufzeitmessung Beide Skripte messen die Ausführungszeit mit: ```powershell $start = Get-Date ... $end = Get-Date $duration = $end - $start ``` Ausgabe: ```text Laufzeit: X Sekunden ``` --- ## 🔍 Beispielausgabe ```text www.google.de is reachable www.github.com is reachable www.gibtsnicht.com is not reachable Laufzeit: 1.23 ``` --- ## ⚠️ Hinweise * `Test-Connection` verwendet ICMP (Ping) → kann durch Firewalls blockiert sein * `Write-Host` ist nicht optimal für parallele Ausführung (Output kann unsortiert erscheinen) * Für produktive Skripte empfiehlt sich `Write-Output` --- ## 💡 Empfehlung | Szenario | Empfehlung | | --------------------- | ---------------------- | | Alte Systeme / Legacy | `Parallel-ps5.ps1` | | Moderne Umgebung | `Parallel.ps1` | | Performance wichtig | PowerShell 7 verwenden | --- ## 🧠 Lernziel Diese Beispiele zeigen: * Unterschied zwischen sequentieller und paralleler Ausführung * Unterschiede zwischen Jobs und modernen Runspaces * Grundlagen für Performance-Optimierung in PowerShell --- ## 📌 Erweiterungsmöglichkeiten * Logging in Datei (CSV / JSON) * Fehlerhandling (Timeouts, DNS Fehler) * Throttling (`-ThrottleLimit`) * Integration in Monitoring-Skripte --- Viel Spaß beim Experimentieren mit PowerShell Multi-Threading 🚀