added readme and cleaned up ps7 example

This commit is contained in:
2026-03-31 22:15:46 +02:00
parent 0a110a5512
commit bc2da45099
2 changed files with 163 additions and 10 deletions

View File

@@ -16,16 +16,6 @@ $urls | ForEach-Object -Parallel {
Write-Host "$($_) could not be reached" 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 $end = Get-Date
$duration = $end - $start $duration = $end - $start

163
readme.md Normal file
View File

@@ -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 🚀