3.1 KiB
3.1 KiB
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:
- Definieren eine Liste von URLs
- Prüfen die Erreichbarkeit via
Test-Connection - Geben das Ergebnis pro URL aus
- 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-Joberstellt -
Jeder Job prüft die Erreichbarkeit mit
Test-Connection -
Ergebnisse werden gesammelt mit:
Wait-JobReceive-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
.\Parallel-ps5.ps1
⚡ Script 2: Parallel.ps1 (PowerShell 7+)
Beschreibung
Dieses Skript nutzt die moderne Parallelisierung mit:
ForEach-Object -Parallel
Ablauf
- URLs werden direkt parallel verarbeitet
- Jeder Thread führt
Test-Connectionaus - Ergebnisse werden direkt ausgegeben
- Laufzeit wird gemessen
Vorteile
- Deutlich schneller
- Weniger Overhead als Jobs
- Einfacher Code
Voraussetzungen
- PowerShell 7 oder höher
Ausführung
pwsh .\Parallel.ps1
⏱️ Laufzeitmessung
Beide Skripte messen die Ausführungszeit mit:
$start = Get-Date
...
$end = Get-Date
$duration = $end - $start
Ausgabe:
Laufzeit: X Sekunden
🔍 Beispielausgabe
www.google.de is reachable
www.github.com is reachable
www.gibtsnicht.com is not reachable
Laufzeit: 1.23
⚠️ Hinweise
Test-Connectionverwendet ICMP (Ping) → kann durch Firewalls blockiert seinWrite-Hostist 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 🚀