Das Übertragen mithilfe einer Pipeline funktioniert im Prinzip an beliebigen Stellen von Windows PowerShell. Obwohl auf dem Bildschirm Text angezeigt wird, überträgt Windows PowerShell über die Pipeline keinen Text zwischen den Befehlen. Es werden stattdessen Objekte über die Pipeline übertragen.

Die Notation für Pipelines entspricht der in anderen Shells, sodass auf den ersten Blick keine Neuerungen in Windows PowerShell erkennbar sind. Wenn Sie z. B. mit dem Cmdlet Out-Host die seitenweise Anzeige der Ausgabe aus einem anderen Befehl erzwingen, ähnelt diese Ausgabe normal auf dem Bildschirm angezeigtem Text, der in Seiten aufgeteilt ist:

PS> Get-ChildItem -Path C:\WINDOWS\System32 | Out-Host -Paging

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\WINDOWS\system32

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2005-10-22  11:04 PM        315 $winnt$.inf
-a---        2004-08-04   8:00 AM      68608 access.cpl
-a---        2004-08-04   8:00 AM      64512 acctres.dll
-a---        2004-08-04   8:00 AM     183808 accwiz.exe
-a---        2004-08-04   8:00 AM      61952 acelpdec.ax
-a---        2004-08-04   8:00 AM     129536 acledit.dll
-a---        2004-08-04   8:00 AM     114688 aclui.dll
-a---        2004-08-04   8:00 AM     194048 activeds.dll
-a---        2004-08-04   8:00 AM     111104 activeds.tlb
-a---        2004-08-04   8:00 AM       4096 actmovie.exe
-a---        2004-08-04   8:00 AM     101888 actxprxy.dll
-a---        2003-02-21   6:50 PM     143150 admgmt.msc
-a---        2006-01-25   3:35 PM      53760 admparse.dll
<SPACE> next page; <CR> next line; Q quit
...

Der Befehl "Paging" von Out-Host stellt ein nützliches Pipelineelement dar, wenn eine lange Ausgabe vorliegt, die langsam angezeigt werden soll. Er ist besonders nützlich, wenn es sich um einen sehr CPU-intensiven Vorgang handelt. Da die Verarbeitung an das Cmdlet "Out-Host" übertragen wird, wenn eine vollständige Seite angezeigt werden kann, unterbrechen die Cmdlets, die in der Pipeline vor diesem Cmdlet stehen, die Verarbeitung, bis die nächste Ausgabeseite verfügbar ist. Sie können dies überprüfen, indem Sie im Windows Task-Manager die CPU-Auslastung und den von Windows PowerShell verwendeten Arbeitsspeicher überwachen.

Führen Sie den folgenden Befehl aus: Get-ChildItem C:\Windows -Recurse. Vergleichen Sie die CPU- und Speicherauslastung mit diesem Befehl: Get-ChildItem C:\Windows -Recurse | Out-Host -Paging. Auf dem Bildschirm wird ausschließlich Text angezeigt, allerdings nur aus dem Grund, dass die Objekte in einem Konsolenfenster als Text dargestellt werden müssen. Dabei handelt es sich jedoch lediglich um eine Darstellung der tatsächlich in Windows PowerShell ausgeführten Vorgänge. Nehmen wir z. B. das Cmdlet "Get-Location". Wenn Sie Get-Location eingeben und derzeit im Stammverzeichnis des Laufwerks "C:" arbeiten, wird die folgende Ausgabe angezeigt:

PS> Get-Location

Path
----
C:\

Wenn Windows PowerShell Text über eine Pipeline überträgt, werden bei Ausgabe eines Befehls, z. B. Get-Location | Out-Host Zeichenfolgen von Get-Location an Out-Host übergeben, und zwar in der Reihenfolge, in der diese auf dem Bildschirm angezeigt werden. Das heißt, wenn Sie die Informationen aus der Überschrift ignorieren, empfängt Out-Host zunächst das Zeichen 'C', anschließend das Zeichen ':' und dann das Zeichen '\'. Das Cmdlet Get-Location kann die Bedeutung der vom Cmdlet Out-Host ausgegebenen Zeichen nicht ermitteln.

Anstelle der Verwendung von Text für die Kommunikation zwischen Befehlen in einer Pipeline verwendet Windows PowerShell Objekte. Vom Benutzerstandpunkt fassen Objekte zusammengehörige Informationen in einer Form zusammen, die deren Bearbeitung als Einheit vereinfacht und damit das Extrahieren der gewünschten Elemente vereinfacht.

Der Befehl Get-Location gibt keinen Text zurück, der den aktuellen Pfad enthält. Er gibt ein Informationspaket zurück, das als PathInfo-Objekt bezeichnet wird und den aktuellen Pfad sowie weitere Informationen enthält. Das Cmdlet Out-Host sendet dieses PathInfo-Objekt dann an den Bildschirm, und Windows PowerShell entscheidet anhand der Formatierungsregeln, welche Informationen wie angezeigt werden.

Die Überschriftsinformationen des Cmdlets Get-Location werden erst am Ende des Vorgangs beim Formatieren der Daten für die Bildschirmanzeige hinzugefügt. Auf dem Bildschirm wird nur eine Zusammenfassung der Informationen angezeigt, keine vollständige Darstellung des Ausgabeobjekts.

Wie können Sie, wenn von einem Windows PowerShell-Befehl mehr Informationen ausgegeben werden, als im Konsolenfenster angezeigt werden, die nicht sichtbaren Elemente anzeigen? Wie zeigen Sie diese zusätzlichen Daten an? Und wie zeigen Sie die Daten in einem anderen als dem von Windows PowerShell normalerweise verwendeten Format an?

Im verbleibenden Teil dieses Kapitels erhalten Sie Informationen zum Ermitteln der Struktur bestimmter Windows PowerShell-Objekte, zum Auswählen bestimmter Elemente, zum Formatieren dieser Elemente für die übersichtlichere Anzeige und zum Senden dieser Informationen an andere Ausgabeorte, z. B. Dateien oder Drucker.




Inhaltsverzeichnis