Informationen zur Umleitung
Kurze Beschreibung
Erläutert, wie Die Ausgabe von PowerShell an Textdateien umgeleitet wird.
Lange Beschreibung
Standardmäßig sendet PowerShell die Ausgabe an den PowerShell-Host. In der Regel ist dies die Konsolenanwendung. Sie können die Ausgabe jedoch an eine Textdatei weiterleiten, und Sie können die Fehlerausgabe an den regulären Ausgabedatenstrom umleiten.
Sie können die folgenden Methoden verwenden, um die Ausgabe umzuleiten:
Verwenden Sie das
Out-File
Cmdlet, das die Befehlsausgabe an eine Textdatei sendet. In der Regel verwenden Sie dasOut-File
Cmdlet, wenn Sie seine Parameter wieEncoding
,Force
,Width
oderNoClobber
verwenden müssen.Verwenden Sie das
Tee-Object
Cmdlet, das die Befehlsausgabe an eine Textdatei sendet und dann an die Pipeline sendet.Verwenden Sie die PowerShell-Umleitungsoperatoren. Die Verwendung des Umleitungsoperators mit einem Dateiziel entspricht funktional dem Piping an
Out-File
ohne zusätzliche Parameter.
Weitere Informationen zu Streams finden Sie unter about_Output_Streams.
Umleitungsfähige Ausgabestreams
PowerShell unterstützt die Umleitung der folgenden Ausgabestreams.
Stream # | BESCHREIBUNG | Eingeführt in | Cmdlet "Schreiben" |
---|---|---|---|
1 | Erfolgreiche Stream | PowerShell 2.0 | Write-Output |
2 | Fehler Stream | PowerShell 2.0 | Write-Error |
3 | Warnung Stream | PowerShell 3.0 | Write-Warning |
4 | Ausführliche Stream | PowerShell 3.0 | Write-Verbose |
5 | Debuggen von Stream | PowerShell 3.0 | Write-Debug |
6 | Stream | PowerShell 5.0 | Write-Information |
* | Alle Streams | PowerShell 3.0 |
Hinweis
Es gibt auch einen Statusdatenstrom in PowerShell, der jedoch keine Umleitung unterstützt.
PowerShell-Umleitungsoperatoren
Die PowerShell-Umleitungsoperatoren sind wie folgt, wobei n
die Streamnummer darstellt. Der Erfolgsdatenstrom ( 1
) ist die Standardeinstellung, wenn kein Datenstrom angegeben ist.
Operator | BESCHREIBUNG | Syntax |
---|---|---|
> |
Senden des angegebenen Datenstroms an eine Datei. | n> |
>> |
Fügen Sie einen angegebenen Stream an eine Datei an. | n>> |
>&1 |
Leitet den angegebenen Stream an den Success-Stream um. | n>&1 |
Hinweis
Im Gegensatz zu einigen Unix-Shells können Sie nur andere Streams an den Success-Stream umleiten.
Beispiele
Beispiel 1: Umleiten von Fehlern und Ausgabe an eine Datei
Dieses Beispiel wird für ein element ausgeführt dir
, das erfolgreich ist, und eines, das einen Fehler verursacht.
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
Verwendet, 2>&1
um den Fehlerdatenstrom an den Erfolgsdatenstrom umzuleiten und >
den resultierenden Success-Stream an eine Datei namens zu senden. dir.log
Beispiel 2: Senden aller Erfolgsdatenstromdaten an eine Datei
In diesem Beispiel werden alle Success-Streamdaten an eine Datei namens script.log
gesendet.
.\script.ps1 > script.log
Beispiel 3: Senden von Erfolgs-, Warnungs- und Fehlerdatenströmen an eine Datei
In diesem Beispiel wird gezeigt, wie Sie Umleitungsoperatoren kombinieren können, um ein gewünschtes Ergebnis zu erzielen.
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > P:\Temp\redirection.log
3>&1
Leitet den Warnungsdatenstrom an den Erfolgsdatenstrom um.2>&1
Leitet den Fehlerdatenstrom an den Success-Stream um (der jetzt auch alle Warnungsdaten enthält)>
Leitet den Success-Stream (der jetzt sowohl Warnungs - als auch Fehlerdatenströme enthält) an eine Datei mit dem NamenC:\temp\redirection.log
um.
Beispiel 4: Umleiten aller Streams an eine Datei
In diesem Beispiel werden alle Datenströme von einem Skript mit dem Namen script.ps1
an eine Datei namens gesendet. script.log
.\script.ps1 *> script.log
Beispiel 5: Unterdrücken aller Write-Host- und Informationsdatenstromdaten
In diesem Beispiel werden alle Daten des Informationsstreams unterdrückt. Weitere Informationen zu Informationsstream-Cmdlets finden Sie unter Write-Host und Write-Information.
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
Beispiel 6: Anzeigen der Auswirkung von Aktionseinstellungen
Aktionseinstellungsvariablen und -parameter können ändern, was in einen bestimmten Stream geschrieben wird. Das Skript in diesem Beispiel zeigt, wie sich der Wert von $ErrorActionPreference
darauf auswirkt, was in den Fehlerdatenstrom geschrieben wird.
$ErrorActionPreference = 'Continue'
$ErrorActionPreference > log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'SilentlyContinue'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Stop'
$ErrorActionPreference >> log.txt
Try {
get-item /not-here 2>&1 >> log.txt
}
catch {
"`tError caught!" >> log.txt
}
$ErrorActionPreference = 'Ignore'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Inquire'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt
$ErrorActionPreference = 'Continue'
Wenn wir dieses Skript ausführen, werden wir aufgefordert, wenn $ErrorActionPreference
auf Inquire
festgelegt ist.
PS C:\temp> .\test.ps1
Confirm
Cannot find path 'C:\not-here' because it does not exist.
[Y] Yes [A] Yes to All [H] Halt Command [S] Suspend [?] Help (default is "Y"): H
Get-Item: C:\temp\test.ps1:23
Line |
23 | get-item /not-here 2>&1 >> log.txt
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The running command stopped because the user selected the Stop option.
Wenn wir die Protokolldatei untersuchen, sehen wir Folgendes:
PS C:\temp> Get-Content .\log.txt
Continue
Get-Item: C:\temp\test.ps1:3
Line |
3 | get-item /not-here 2>&1 >> log.txt
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Cannot find path 'C:\not-here' because it does not exist.
SilentlyContinue
Stop
Error caught!
Ignore
Inquire
Hinweise
Die Umleitungsoperatoren, die keine Daten anfügen (>
und n>
), überschreiben den aktuellen Inhalt der angegebenen Datei ohne Warnung.
Wenn die Datei jedoch eine schreibgeschützte, ausgeblendete oder Systemdatei ist, schlägt die Umleitung fehl. Die Anfügeumleitungsoperatoren (>>
und n>>
) schreiben nicht in eine schreibgeschützte Datei, sondern fügen Inhalt an ein System oder eine ausgeblendete Datei an.
Um die Umleitung von Inhalten in eine schreibgeschützte, ausgeblendete oder Systemdatei zu erzwingen, verwenden Sie das Out-File
Cmdlet mit seinem Force
Parameter.
Wenn Sie in Dateien schreiben, verwenden UTF8NoBOM
die Umleitungsoperatoren Codierung. Wenn die Datei eine andere Codierung aufweist, ist die Ausgabe möglicherweise nicht ordnungsgemäß formatiert. Verwenden Sie das Out-File
Cmdlet mit seinem Encoding
Parameter, um in Dateien mit einer anderen Codierung zu schreiben.
Potenzielle Verwechslung mit Vergleichsoperatoren
Der >
Operator ist nicht mit dem Vergleichsoperator Größer als zu verwechseln (häufig wie >
in anderen Programmiersprachen bezeichnet).
Abhängig von den zu vergleichenden Objekten kann die Ausgabe mit >
korrekt erscheinen (da 36 nicht größer als 42 ist).
PS> if (36 > 42) { "true" } else { "false" }
false
Eine Überprüfung des lokalen Dateisystems kann jedoch feststellen, dass eine Datei namens 42
mit dem Inhalt 36
geschrieben wurde.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
Der Versuch, den umgekehrten Vergleich <
(kleiner als) zu verwenden, führt zu einem Systemfehler:
PS> if (36 < 42) { "true" } else { "false" }
At line:1 char:8
+ if (36 < 42) { "true" } else { "false" }
+ ~
The '<' operator is reserved for future use.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
Wenn der numerische Vergleich der erforderliche Vorgang -lt
ist und -gt
verwendet werden soll. Siehe: -gt
Vergleichsoperator