Umleiten der Ausgabe

PowerShell stellt mehrere Cmdlets bereit, mit denen Sie die Datenausgabe direkt steuern können. Diese Cmdlets haben zwei wichtige Merkmale gemeinsam.

Zum Ersten transformieren sie Daten grundsätzlich in eine Form von Text. Dies geschieht, weil die Cmdlets Daten an Systemkomponenten ausgegeben, die Texteingabe erfordern. Das heißt, sie müssen die Objekte als Text darstellen. Daher wird der Text so formatiert, wie Sie ihn im PowerShell-Konsolenfenster sehen.

Zum Zweiten wird für diese Cmdlets das PowerShell-Verb Out verwendet, da sie Informationen aus PowerShell heraus an ein anderes Element senden.

Konsolenausgabe

Standardmäßig sendet PowerShell Daten an das Hostfenster, und dies entspricht exakt der Funktionsweise des Cmdlets Out-Host. Die primäre Verwendung für das Out-Host-Cmdlet ist das Paging. Beispielsweise wird Out-Host im folgenden Befehl dazu verwendet, die Ausgabe des Get-Command-Cmdlets auszulagern:

Get-Command | Out-Host -Paging

Die Anzeige des Hostfensters befindet sich außerhalb von PowerShell. Dies ist wichtig, denn Daten, die aus PowerShell gesendet werden, werden tatsächlich entfernt. Sie können dies sehen, wenn Sie eine Pipeline erstellen, über die die Daten an das Hostfenster ausgelagert werden, und dann versuchen, die Daten als Liste zu formatieren, wie hier gezeigt:

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

Sie erwarten wahrscheinlich, dass der Befehl Seiten mit Prozessinformationen im Listenformat anzeigt. Stattdessen werden die Daten in der standardmäßigen tabellarischen Liste 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 nichts empfängt, was formatiert werden kann.

Damit dieser Befehl die richtige Struktur hat, muss das Cmdlet Out-Host an das Ende der Pipeline gesetzt werden, wie nachstehend dargestellt. Dies bewirkt, dass die Prozessdaten in einer Liste formatiert werden, bevor sie ausgelagert und angezeigt werden.

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. Ein Out-Cmdlet sollte immer am Ende einer Pipeline stehen.

Hinweis

Alle Out-Cmdlets rendern Ausgabe als Text, wobei sie die Formatierung verwenden, die für das Konsolenfenster wirksam ist, einschließlich Längenbeschränkungen für Zeilen.

Verwerfen einer Ausgabe

Das Out-Null-Cmdlet verwirft sofort jegliche Eingabe, die es empfängt. Damit können Sie überflüssige Daten verwerfen, die Sie als Nebeneffekt des Ausführens eines Befehls erhalten. Wenn Sie den folgenden Befehl eingeben, erhalten Sie keinerlei Rückgabe vom Befehl:

Get-Command | Out-Null

Das Cmdlet Out-Null verwirft keine Fehlerausgabe. Wenn Sie beispielsweise den folgenden Befehl eingeben, wird eine Meldung angezeigt, dass PowerShell Is-NotACommand nicht erkennt:

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

Drucken von Daten

Out-Printer ist nur auf Windows-Plattformen verfügbar.

Sie können Daten drucken, indem Sie das Cmdlet Out-Printer verwenden. Das Cmdlet Out-Printer verwendet den Standarddrucker, wenn Sie keinen Druckernamen angeben. Sie können jeden Windows-basierten Drucker verwenden, indem Sie dessen Anzeigenamen angeben. Es sind weder irgendeine Art von Druckeranschlusszuordnung noch sogar ein echter physischer Drucker erforderlich. Wenn Sie etwa die Bilderstellungstools für Microsoft Office-Dokumente installiert haben, können Sie die Daten in eine Bilddatei senden, indem Sie Folgendes eingeben:

Get-Command Get-Command | Out-Printer -Name 'Microsoft Office Document Image Writer'

Speichern von Daten

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

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

Die Ergebnisse, die das Cmdlet Out-File bringt, entsprechen möglicherweise nicht Ihrer Erwartung, wenn Sie an die herkömmliche Ausgabeumleitung denken. Um dessen Verhalten zu verstehen, müssen Sie den Kontext berücksichtigen, in dem das Cmdlet Out-File ausgeführt wird.

In Windows PowerShell 5.1 erstellt das Cmdlet Out-File eine Unicode-Datei. Einige Tools, die ASCII-Dateien erwarten, funktionieren mit dem Standardausgabeformat nicht ordnungsgemäß. Sie können das Standardausgabeformat in ASCII ändern, indem Sie den Encoding-Parameter verwenden:

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

Out-file formatiert Dateiinhalt so, dass er wie eine Konsolenausgabe aussieht. Dies bewirkt, dass die Ausgabe abgeschnitten wird, so wie dies in den meisten Fällen in einem Konsolenfenster erfolgt. Angenommen, Sie führen den folgenden Befehl aus:

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

Die Ausgabe sieht dann wie folgt aus:

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

Wenn Sie eine Ausgabe erhalten möchten, die keine Zeilenumbrüche erzwingt, um die Bildschirmbreite einzuhalten, verwenden Sie den Width-Parameter, um die Breite anzugeben. Weil Width ein 32-Bit-Ganzzahl-Parameter ist, beträgt sein größter Wert 2147483647. Geben Sie Folgendes ein, um die Zeilenbreite auf diesen größten Wert festzulegen:

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

Das Cmdlet Out-File lässt sich dann am besten verwenden, wenn Sie Ausgabe so speichern möchten, wie sie in der Konsole angezeigt wird.