From bc2da450990a51994d215f9e60cdea43dd6adfea Mon Sep 17 00:00:00 2001 From: maxxi Date: Tue, 31 Mar 2026 22:15:46 +0200 Subject: [PATCH] added readme and cleaned up ps7 example --- Parallel.ps1 | 10 ---- readme.md | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+), 10 deletions(-) create mode 100644 readme.md diff --git a/Parallel.ps1 b/Parallel.ps1 index 0ed5742..ef77f81 100644 --- a/Parallel.ps1 +++ b/Parallel.ps1 @@ -16,16 +16,6 @@ $urls | ForEach-Object -Parallel { Write-Host "$($_) could not be reached" } } -<# -$urls | ForEach-Object { - $reachable = Test-Connection -ComputerName $_ -Quiet - if($reachable){ - Write-Host "$($_) is reachable" - }else { - Write-Host "$($_) could not be reached" - } -} -#> $end = Get-Date $duration = $end - $start diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..4309823 --- /dev/null +++ b/readme.md @@ -0,0 +1,163 @@ +# 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 🚀