Files
PS-MultiThreading/readme.md

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:

  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

.\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-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

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