Powershell Pipeline richtig verwenden – Befehle mit der Pipe in der Windows PowerShell weiterverarbeiten

Befehle leicht mit der Pipe zusammenführen

Grundlagen

In der Windows Powershell bietet die Pipeline ein tolle Möglichkeit um komplexe Aufgaben zu erledigen. Die Pipeline kann man sich ganz einfach als “Objekt-Weitergabe” vorstellen. D.h. Sie führen einen Befehl aus und anstatt sich das Ergebnis direkt ausgeben zu lassen, wird das Ergebnis an einen weiteren Befehl übergeben, der dann wieder irgendetwas mit dem Ergebnis macht. Von Prinzip ist das eine Befehlskette.

Ganz allgemein kann man sich den Aufbau einer Befehlskette wie in der Tabelle dargestellt vorstellen. Die Befehle sind jeweils durch die Pipe (|) verbunden.

Da es in der Powershell sehr viele Cmdlets gibt, möchte ich nur zeigen, wie man sich auf die Suche nach dem passend machen kann.

Nr.BearbeitungsschrittErläuterungHäufige Cmdlets
1Daten bereitstellenAls erstes werden Daten zum arbeiten benötigt. Hierführ verwendet man in der Regel Cmdlets mit dem Verb Get.Get-
2Das Ergebnis der Daten bearbeiten, bis man das gewüschte erhältIn diesem Schritt verwendet man Cmdlets, die mit Daten arbeiten, welche sie über die Pipeline erhalten. Meistens sind hier Cmdlets mit dem Substantiv Object anzuwenden-Object
3Ausgabe der ErgebnisseOhne diesen Schritt, werden die Ergebnisse im Konsolenfenster ausgegeben. Oft möchte man die Ergebnisse allerdings formatiert speichern.Export-Format-Out-

Die 3 Schritte im Detail

Bearbeitungsschritt Nr. 1

Im Schritt 1 brauchen wir alles was mit Get-.. beginnt. Das Auflisten der Elemente erfolgt unter der Zuhilfenahme der Wildcard.

Get-Command Get-*

Hat man das passende gefunden, so kann man sich der Hilfe bedienen. Z.B. möchte wir mehr Informationen zum Cmdlet Get-Childitem.

Get-help Get-Childitem -detailed

Bearbeitungsschritt Nr. 2

Nachdem man die Daten hat, müssen diese verarbeitet werden. Dazu benötigt man ein Cmdlet mit dem Substantiv Object. Alle diese Cmdlets kann man sich folgendermaßen auflisten lassen.

Get-Command -Noun Object

Die Hilfe funktioniert natürlich wie oben bei Get.

Bearbeitungsschritt Nr. 3

Zu guter letzt möchten wir die Ergebnisse für die Ausgabe formatieren und ggf. konvertierten oder exportieren. Die hierfür zu verwendenden Cmdlets sind an ihrem Verb erkennbar. Diese sind entweder Out (Ausgabe), Export (Exportieren) und ConvertTo (Für die Konvertierung in ein anderes Format). Einige Beispiele, wie man Ausgaben speichert, findet ihr in diesem Artikel.

Artikel: Powershell Ausgabe speichern.

Alle Cmdlets dieser Gruppen kann man sich wieder mit Hilfe der Wildcard auflisten lassen.

Get-Command Out*
Get-Command Export*
Get-Command ConvertTo*

Die Hilfe für ein bestimmtes Cmdlet funktioniert natürlich wieder genauso wie oben. Also z.B. :

Get-Help ConvertTo-Html -detailed

Zum Abschluss dieses Artikels, möchte ich euch noch anhand der folgenden Aufgabe erläutern, wie man mit Hilfe der Pipeline eine komplexe Aufgabe schrittweise entwickelt.

Aufgabe:

Es sollen alle .exe Daten die größer als 20KB sind mit ihrem Namen und deren Größe ausgegeben werden. Des weiteren soll die Ausgabe in absteigender Reihenfolge in ein .html Dokument konvertiert werden.

Die Entwicklung der Aufgabe erfolgt in 6 Schritten.

1. Schritt: Auslesen aller .exe Dateien aus dem Verzeichnisinhalt. Mit der Wildcard (*) geht das relativ einfach.

Get-ChildItem -Path c:\Windows*.exe

2. Schritt: Ausgabe alle Dateien die größer als 20KB sind.

Get-ChildItem -Path C:\Windows*.exe | Where-Object { $_.Length -gt 20kb}

3. Schritt: Nur der Name und die Größe sollen ausgegeben werden:

Get-ChildItem -Path C:\Windows*.exe | Where-Object { $_.Length -gt 20kb } | Select-Object -Property Length, Name

4. Schritt: Sortierung nach Dateigröße in absteigender Reihenfolge.

Get-ChildItem -Path C:\Windows*.exe | Where-Object { $_.Length -gt 20kb } | Select-Object -Property Length, Name | Sort-Object -Property Length -Descending

5. Schritt:  Ausgabe in das  HTML-Format konvertieren

Get-ChildItem -Path C:\Windows*.exe | Where-Object { $_.Length -gt 20kb } | Select-Object -Property Length, Name | Sort-Object -Property Length -Descending | ConvertTo-Html -Body "<h1>Ausgabe Dateien </h1>"

6. Schritt: HTML Dokument speichern.

Get-ChildItem -Path C:\Windows*.exe | Where-Object { $_.Length -gt 20kb } | Select-Object -Property Length, Name | Sort-Object -Property Length -Descending | ConvertTo-Html -Body "<h1>Ausgabe Dateien </h1>" | Set-Content -Path C:\UserstestDocumentsdateien.html

Wie man anhand des Beispiels sieht, kann man mit der Pipeline relativ komplexe Aufgabe bewältigen. Wichtig dabei ist immer die Schrittweise Vorgehensweise und die zu Hilfenahme der Hilfe. Wenn man Get-Help verwendet, ist es immer auch sinnvoll die Optionen -detailed oder -examples zu verwendet. Meistens erhält man hier einen guten Überblick über die Funktionsweise der einzelnen Cmdlets.

Fazit

Wenn man eine strukturierte Vorgehensweise hat, so kann man sich mit der Windows Powershell und der Pipeline sehr schöne Befehlsketten basteln. Natürlich bedarf das ganze immer etwas an Übung. Wer so wie ich gerne mit Büchern arbeitet, dem kann ich das Buch: Windows PowerShell 4.0: Das Praxisbuch (Anzeige)* sehr empfehlen

Tolles Buch

Das könnte dich auch interessieren:

Hinterlasse jetzt einen Kommentar

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*