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 -Name Get-* | 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.