Windows PowerShell bietet verschiedene Cmdlets, mit denen Sie die Datenausgabe direkt steuern können. Diese Cmdlets haben zwei wichtige Merkmale gemeinsam.

Erstens wandeln Sie Daten immer in eine bestimmte Textform um. Dies ist erforderlich, weil sie die Daten an Systemkomponenten ausgeben, die eine Texteingabe erfordern. Die Objekte müssen daher als Text dargestellt werden. Daher ist der Text formatiert, der im Windows PowerShell-Konsolenfenster angezeigt wird.

Zweitens wird für diese Cmdlets das Windows PowerShell-Verb Out verwenden, da sie Informationen aus Windows PowerShell senden. Das Cmdlet Out-Host bildet keine Ausnahme: die Hostfensteranzeige befindet außerhalb von Windows PowerShell. Dies ist wichtig, denn aus Windows PowerShell gesendete Daten werden entfernt. Sie können dies überprüfen, indem Sie eine Pipeline mit einer seitenweisen Ausgabe von Daten an das Hostfenster erstellen und dann versuchen, diese Daten als Liste zu formatieren, wie im folgenden Codebeispiel dargestellt:

PS> Get-Process | Out-Host -Paging | Format-List

Sie erwarten möglicherweise, dass der Befehl Prozessinformationen seitenweise im Listenformat anzeigt. Stattdessen wird allerdings die tabellarische Standardliste angezeigt:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    101       5     1076       3316    32     0.05   2888 alg
...
    618      18    39348      51108   143   211.20    740 explorer
    257       8     9752      16828    79     3.02   2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...

Das Cmdlet Out-Host sendet die Daten direkt an die Konsole, sodass der Befehl Format-List niemals Elemente für das Formatieren empfängt.

Die richtige Strukturierung dieses Befehls erreichen Sie, indem Sie das Cmdlet Out-Host an das Ende der Pipeline stellen, wie im Folgenden dargestellt. Damit werden die Prozessdaten zunächst in einer Liste formatiert, bevor sie in Seiten aufgeteilt und angezeigt werden.

PS> Get-Process | Format-List | Out-Host -Paging


Id      : 2888
Handles : 101
CPU     : 0.046875
Name    : alg
...

Id      : 740
Handles : 612
CPU     : 211.703125
Name    : explorer

Id      : 2560
Handles : 257
CPU     : 3.015625
Name    : explorer
...
<SPACE> next page; <CR> next line; Q quit
...

Dies gilt für alle Out-Cmdlets. Out-Cmdlets müssen immer am Ende der Pipeline stehen.

Hinweis:

Alle Out-Cmdlets rendern die Ausgabe als Text, wobei die für das Konsolenfenster geltende Formatierung verwendet wird, einschließlich der Begrenzungen für die Zeilenlänge.

Seitenweise Aufteilung der Konsolenausgabe (Out-Host)

Windows PowerShell sendet Daten standardmäßig an das Hostfenster, dies entspricht genau der Funktionsweise des Cmdlets "Out-Host". Die primäre Verwendung des Cmdlets "Out-Host" besteht in der seitenweisen Aufteilung von Daten, die bereits beschrieben wurde. So wird z. B. im folgenden Befehl "Out-Host" verwendet, um die Ausgabe des Cmdlet "Get-Command" seitenweise aufzuteilen.

PS> Get-Command | Out-Host -Paging

Sie können auch die Funktion more verwenden, um Daten seitenweise darzustellen. In Windows PowerShell bildet more eine Funktion, mit der Out-Host -Paging aufgerufen wird. Mit dem folgenden Befehl wird die Verwendung der Funktion more für die seitenweise Anzeige der Ausgabe von Get-Command veranschaulicht.

PS> Get-Command | more

Wenn Sie einen oder mehrere Dateinamen als Argumente für die Funktion "more" angeben, liest die Funktion die angegebenen Dateien und zeigt deren Inhalt seitenweise auf dem Host an:

PS> more c:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
...

Verwerfen der Ausgabe (Out-Null)

Das Cmdlet Out-Null wurde entwickelt, um sämtliche empfangenen Eingaben sofort zu verwerfen. Dies ist hilfreich, um nicht benötigte Daten zu verwerfen, die Sie durch die Ausführung eines Befehls erhalten. Wenn Sie folgenden Befehl eingeben, erhalten Sie keine Ausgabe von dem Befehl:

PS> Get-Command | Out-Null

Das Cmdlet Out-Null verwirft keine Fehlerausgaben. Wenn Sie z. B. den folgenden Befehl eingeben, werden Sie in einer Meldung darüber informiert, dass Windows PowerShell "Is-NotACommand" nicht erkennt:

PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' is not recognized as a cmdlet, function, operabl
e program, or script file.
At line:1 char:12
+ Get-Command  <<<< Is-NotACommand | Out-Null

Ausgeben von Daten (Out-Printer)

Mithilfe des Cmdlet Out-Printer können Sie Daten ausgeben oder drucken. Wenn Sie keinen Druckernamen bereitstellen, verwendet das Cmdlet Out-Printer den Standarddrucker. Sie können jeden Windows-basierten Drucker verwenden, indem Sie dessen Anzeigenamen angeben. Sie müssen keinen Druckerport zuordnen und keinen physischen Drucker verwenden. Wenn z. B. die Microsoft Office Document Imaging-Tools installiert sind, können Sie Daten an eine Bilddatei senden, indem Sie Folgendes eingeben:

PS> Get-Command Get-Command | Out-Printer -Name "Microsoft Office Document Image Writer"

Speichern von Daten (Out-File)

Mit dem Cmdlet Out-File können Sie die Ausgabe statt an das Konsolenfenster an eine Datei senden. Mit der folgenden Befehlszeile wird eine Liste von Prozessen an die Datei C:\temp\processlist.txt gesendet:

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt 

Wenn Sie mit der herkömmlichen Ausgabeumleitung vertraut sind, entsprechen die Ergebnisse des Cmdlet Out-File möglicherweise nicht Ihren Erwartungen. Dieses Verhalten wird verständlicher, wenn Sie den Kontext betrachten, in dem das Cmdlet Out-File ausgeführt wird.

Das Cmdlet Out-File erstellt standardmäßig eine Unicode-Datei. Dies ist i. d. R. die beste Standardeinstellung, sie bedeutet aber auch, dass Tools, die ASCII-Dateien erwarten, mit dem Standardausgabeformat nicht ordnungsgemäß funktionieren. Mit dem Encoding-Parameter können Sie das Standardausgabeformat in ASCII ändern:

PS> Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII

Out-file formatiert den Dateiinhalt so, dass dieser wie die Konsolenausgabe dargestellt wird. Dies führt in den meisten Fällen zum Abschneiden der Ausgabe wie in einem Konsolenfenster. Führen Sie zum Beispiel den folgenden Befehl aus:

PS> Get-Command | Out-File -FilePath c:\temp\output.txt

Die Ausgabe sollte in etwa wie folgt aussehen:

CommandType     Name                            Definition                     
-----------     ----                            ----------                     
Cmdlet          Add-Content                     Add-Content [-Path] <String[...
Cmdlet          Add-History                     Add-History [[-InputObject] ...
...

Wenn Sie eine Ausgabe benötigen, bei der keine Zeilenumbrüche zum Anpassen an die Bildschirmbreite erzwungen werden, können Sie mit dem Width-Parameter die Zeilenbreite angeben. Da Width ein ganzzahliger 32-Bit-Parameter ist, beträgt der Höchstwert 2147483647. Geben Sie Folgendes ein, um die Zeilenbreite auf diesen Höchstwert festzulegen:

Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647

Das Cmdlet Out-File ist besonders hilfreich, wenn Sie die Ausgabe der Anzeige an der Konsole entsprechend speichern möchten. Für eine genauere Steuerung des Ausgabeformats benötigen Sie erweiterte Tools. Diese werden im nächsten Kapitel zusammen mit einigen Einzelheiten über die Objektbearbeitung beschrieben.




Inhaltsverzeichnis