164 lines
3.1 KiB
Markdown
164 lines
3.1 KiB
Markdown
# 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 🚀
|