PowerShell Pipeline & Filter

6 Kern-Cmdlets
Die wichtigsten PowerShell-Cmdlets für Pipeline-Verarbeitung und Filterung: Where-Object · Select-Object · Sort-Object · ForEach-Object · Group-Object · Measure-Object Diese Cmdlets sind das Herzstück der PowerShell-Datenverarbeitung. Sie ermöglichen das Filtern, Sortieren, Auswählen, Gruppieren und Analysieren von Objekten in der Pipeline.

Where-Object – Objekte filtern

Where-Object { $_.Eigenschaft -Operator Wert }
Get-Process | Where-Object { $_.CPU -gt 10 }

Where-Object (Alias: where, ?) filtert Objekte in der Pipeline anhand von Bedingungen. Es werden nur Objekte weitergegeben, die die Bedingung erfüllen.

Häufige Operatoren

Operator Bedeutung
-eq Gleich (equal)
-ne Ungleich (not equal)
-gt Größer als (greater than)
-ge Größer oder gleich
-lt Kleiner als (less than)
-le Kleiner oder gleich
-like Mustervergleich (mit Wildcards)
-match Regulärer Ausdruck
-in Element ist in der Liste
-contains Enthält das Element
Beispiele
Get-Process | Where-Object { $_.CPU -gt 10 } # CPU > 10%
Get-Service | Where-Object Status -eq 'Running' # Laufende Dienste
Get-ChildItem | Where-Object { $_.Length -gt 1MB } # Dateien > 1MB
Get-ChildItem | ? { $_.Name -like '*.log' } # Alias ? für Where-Object
Typische Ausgabe von Get-Process | Where-Object CPU -gt 10:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
1456 62 245678 189432 45.32 1234 1 powershell
Tipp: Die Kurzschreibweise Where-Object Eigenschaft -Operator Wert (ohne Skriptblock) ist seit PowerShell 3.0 verfügbar und wesentlich kompakter.

Select-Object – Eigenschaften auswählen

Select-Object [-Property] Eigenschaften [-First N] [-Last N]
Get-Process | Select-Object Name, CPU, StartTime -First 5

Select-Object (Alias: select) wählt bestimmte Eigenschaften von Objekten aus oder begrenzt die Anzahl der Objekte.

Häufige Optionen

Option Beschreibung
-Property Welche Eigenschaften sollen angezeigt werden
-First N Nur die ersten N Objekte
-Last N Nur die letzten N Objekte
-Skip N Die ersten N Objekte überspringen
-Unique Nur eindeutige Objekte (nach den ausgewählten Eigenschaften)
-ExpandProperty Wert einer Eigenschaft extrahieren
Beispiele
Get-Process | Select-Object Name, CPU, Id # Nur bestimmte Spalten
Get-Service | Select-Object Name, Status -First 10 # Erste 10 Dienste
Get-ChildItem | Select-Object Name, Length -Last 5 # Letzte 5 Dateien
Get-Process | Select-Object ProcessName -Unique # Eindeutige Prozessnamen
Typische Ausgabe von Get-Process | Select-Object Name, CPU -First 3:
Name CPU
---- ---
chrome 15.23
powershell 42.15
System 0.00
Tipp: Select-Object -ExpandProperty Name gibt nur die Werte der Eigenschaft als einfache Strings aus – perfekt für weitere Pipeline-Verarbeitung.

Sort-Object – Objekte sortieren

Sort-Object [-Property] Eigenschaft [-Descending]
Get-ChildItem | Sort-Object Length -Descending

Sort-Object (Alias: sort) sortiert Objekte nach einer oder mehreren Eigenschaften.

Häufige Optionen

Option Beschreibung
-Property Eigenschaft, nach der sortiert wird
-Descending Absteigend sortieren
-Unique Nur eindeutige Werte behalten
-CaseSensitive Groß-/Kleinschreibung beachten
Beispiele
Get-Process | Sort-Object CPU -Descending # Nach CPU-Auslastung absteigend
Get-ChildItem | Sort-Object Length # Nach Dateigröße aufsteigend
Get-Service | Sort-Object Name # Nach Name sortieren
Get-ChildItem | Sort-Object LastWriteTime -Descending # Neueste Dateien zuerst
Get-Process | Sort-Object Name, CPU # Nach Name, dann CPU
Tipp: Sort-Object -Unique ist besonders nützlich, um Duplikate aus einer Liste zu entfernen – z.B. Get-Process | Select-Object -ExpandProperty ProcessName | Sort-Object -Unique.

ForEach-Object – Für jedes Objekt ausführen

ForEach-Object { Aktion }
Get-Process | ForEach-Object { $_.ProcessName }

ForEach-Object (Alias: foreach, %) führt einen Skriptblock für jedes Objekt in der Pipeline aus. Es ist das zentrale Cmdlet für Transformationen und Aktionen pro Objekt.

Wichtige Variablen

Variable Beschreibung
$_ (oder $PSItem) Das aktuelle Objekt in der Pipeline
$_.Eigenschaft Eine Eigenschaft des aktuellen Objekts
Beispiele
Get-Process | ForEach-Object { $_.ProcessName } # Nur Prozessnamen ausgeben
Get-ChildItem | ForEach-Object { $_.Name + " (" + $_.Length + " bytes)" } # Formatierter Output
Get-Service | % { if ($_.Status -eq 'Running') { $_.Name } } # Alias %
1..5 | ForEach-Object { $_ * 2 } # Jede Zahl verdoppeln
Typische Ausgabe von 1..5 | ForEach-Object { $_ * 2 }:
2
4
6
8
10
Tipp: ForEach-Object ist das Cmdlet für die Pipeline. Verwenden Sie foreach (ohne Pipeline) für Schleifen in Skripten, wenn Sie eine fertige Liste haben.

Group-Object – Objekte gruppieren

Group-Object [-Property] Eigenschaft [-Count]
Get-Service | Group-Object Status

Group-Object (Alias: group) gruppiert Objekte nach einer Eigenschaft und zählt die Anzahl in jeder Gruppe.

Häufige Optionen

Option Beschreibung
-Property Eigenschaft, nach der gruppiert wird
-NoElement Zeigt die gruppierten Objekte nicht an, nur die Zählung
-CaseSensitive Groß-/Kleinschreibung beachten
Beispiele
Get-Service | Group-Object Status # Dienste nach Status gruppieren
Get-Process | Group-Object ProcessName # Prozesse nach Name gruppieren
Get-ChildItem | Group-Object Extension # Dateien nach Dateiendung gruppieren
Get-EventLog System | Group-Object EntryType -NoElement # Nur Zählung, ohne Details
Typische Ausgabe von Get-Service | Group-Object Status:
Count Name Group
----- ---- -----
45 Running {AeLookupSvc, AGSService, AppIDSvc, Appinfo...}
12 Stopped {AeLookupSvc, ALG, AppMgmt, BITS...}
Tipp: Group-Object ist ideal für schnelle Statistiken – wie viele Dienste laufen oder wie viele Dateien einer bestimmten Erweiterung existieren.

Measure-Object – Statistiken berechnen

Measure-Object [-Property] Eigenschaft [-Min] [-Max] [-Sum] [-Average]
Get-Process | Measure-Object CPU -Min -Max -Average -Sum

Measure-Object (Alias: measure) berechnet statistische Werte wie Minimum, Maximum, Summe, Durchschnitt und Anzahl von Objekten oder Eigenschaften.

Häufige Optionen

Option Beschreibung
-Min Minimalwert berechnen
-Max Maximalwert berechnen
-Sum Summe berechnen
-Average Durchschnitt berechnen
-StandardDeviation Standardabweichung berechnen
-Line Zählt Zeilen (für Textdateien)
-Word Zählt Wörter
-Character Zählt Zeichen
Beispiele
Get-Process | Measure-Object # Anzahl der Prozesse
Get-Process | Measure-Object CPU -Min -Max -Average # CPU-Statistiken
Get-ChildItem | Measure-Object Length -Sum # Gesamtgröße aller Dateien
Get-Content log.txt | Measure-Object -Line # Zeilen zählen
Typische Ausgabe von Get-Process | Measure-Object CPU -Min -Max -Average:
Count : 245
Average : 12.45
Sum : 3050.25
Maximum : 245.67
Minimum : 0.00
Tipp: Measure-Object -Line -Word -Character ist die PowerShell-Entsprechung zu wc unter Linux – perfekt für Textdatei-Statistiken.

Pipeline-Konzepte im Überblick

$_ (dollar underscore) Das aktuelle Objekt in der Pipeline.
Wird in Skriptblöcken verwendet
Skriptblock Ein in { } eingeschlossener Codeblock.
Wird an Cmdlets wie Where-Object übergeben
Pipeline-Objekt Objekte werden als ganze Objekte, nicht als Text, durch die Pipeline gereicht.
Vollständige .NET-Objekte
Alias Kurzbefehle für Cmdlets.
? = Where-Object, % = ForEach-Object

Quick Summary

Where-Object
Filtern
Select-Object
Auswählen
Sort-Object
Sortieren
ForEach-Object
Für jedes ausführen
Group-Object
Gruppieren
Measure-Object
Statistiken
Get-Process | Where-Object CPU -gt 10 | Sort-Object CPU -Descending | Select-Object Name, CPU -First 5