added readme and cleaned up ps7 example
This commit is contained in:
10
Parallel.ps1
10
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
|
||||
|
||||
163
readme.md
Normal file
163
readme.md
Normal 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 🚀
|
||||
Reference in New Issue
Block a user