Freigeben über


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 das Out-File Cmdlet, wenn Sie seine Parameter wie Encoding, Force, Widthoder NoClobber 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.loggesendet.

.\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 Namen C:\temp\redirection.logum.

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 Inquirefestgelegt 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 36geschrieben 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

Weitere Informationen