Out-File

Sendet die Ausgabe an eine Datei.

Syntax

Out-File
   [-FilePath] <string>
   [[-Encoding] <Encoding>]
   [-Append]
   [-Force]
   [-NoClobber]
   [-Width <int>]
   [-NoNewline]
   [-InputObject <psobject>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Out-File
   [[-Encoding] <Encoding>]
   -LiteralPath <string>
   [-Append]
   [-Force]
   [-NoClobber]
   [-Width <int>]
   [-NoNewline]
   [-InputObject <psobject>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Beschreibung

Das Out-File Cmdlet sendet die Ausgabe an eine Datei. Es verwendet implizit das Formatierungssystem von PowerShell, um in die Datei zu schreiben. Die Datei empfängt dieselbe Anzeigedarstellung wie das Terminal. Dies bedeutet, dass die Ausgabe möglicherweise nicht für die programmgesteuerte Verarbeitung geeignet ist, es sei denn, alle Eingabeobjekte sind Zeichenfolgen. Wenn Sie Parameter für die Ausgabe angeben müssen, verwenden Out-File Sie anstelle des Umleitungsoperators (>). Weitere Informationen zur Umleitung finden Sie unter about_Redirection.

Beispiele

Beispiel 1: Senden der Ausgabe und Erstellen einer Datei

In diesem Beispiel wird gezeigt, wie eine Liste der Prozesse des lokalen Computers an eine Datei gesendet wird. Wenn die Datei nicht vorhanden ist, Out-File wird die Datei im angegebenen Pfad erstellt.

Get-Process | Out-File -FilePath .\Process.txt
Get-Content -Path .\Process.txt

NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     29    22.39      35.40      10.98   42764   9 Application
     53    99.04     113.96       0.00   32664   0 CcmExec
     27    96.62     112.43     113.00   17720   9 Code

Das Get-Process Cmdlet ruft die Liste der Prozesse ab, die auf dem lokalen Computer ausgeführt werden. Die Process-Objekte werden an das Out-File Cmdlet gesendet. Out-File verwendet den FilePath-Parameter und erstellt eine Datei im aktuellen Verzeichnis namens Process.txt. Der Get-Content Befehl ruft Inhalt aus der Datei ab und zeigt ihn in der PowerShell-Konsole an.

Beispiel 2: Verhindern, dass eine vorhandene Datei überschrieben wird

In diesem Beispiel wird verhindert, dass eine vorhandene Datei überschrieben wird. Standardmäßig Out-File werden vorhandene Dateien überschrieben.

Get-Process | Out-File -FilePath .\Process.txt -NoClobber

Out-File : The file 'C:\Test\Process.txt' already exists.
At line:1 char:15
+ Get-Process | Out-File -FilePath .\Process.txt -NoClobber
+               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Das Get-Process Cmdlet ruft die Liste der Prozesse ab, die auf dem lokalen Computer ausgeführt werden. Die Process-Objekte werden an das Out-File Cmdlet gesendet. Out-File verwendet den FilePath-Parameter und versucht, in eine Datei im aktuellen Verzeichnis mit dem Namen Process.txt zu schreiben. Der Parameter NoClobber verhindert, dass die Datei überschrieben wird, und zeigt eine Meldung an, dass die Datei bereits vorhanden ist.

Beispiel 3: Senden der Ausgabe an eine Datei im ASCII-Format

In diesem Beispiel wird gezeigt, wie die Ausgabe mit einem bestimmten Codierungstyp codiert wird.

$Procs = Get-Process
Out-File -FilePath .\Process.txt -InputObject $Procs -Encoding ASCII -Width 50

Das Get-Process Cmdlet ruft die Liste der Prozesse ab, die auf dem lokalen Computer ausgeführt werden. Die Process-Objekte werden in der Variablen gespeichert. $Procs Out-File verwendet den FilePath-Parameter und erstellt eine Datei im aktuellen Verzeichnis namens Process.txt. Der InputObject-Parameter übergibt die Prozessobjekte an $Procs die Datei Process.txt. Der Encoding-Parameter konvertiert die Ausgabe in das ASCII-Format . Der Width-Parameter beschränkt jede Zeile in der Datei auf 50 Zeichen, sodass einige Daten möglicherweise abgeschnitten werden.

Beispiel 4: Verwenden eines Anbieters und Senden der Ausgabe an eine Datei

In diesem Beispiel wird gezeigt, wie Sie das Out-File Cmdlet verwenden, wenn Sie sich nicht in einem FileSystem-Anbieterlaufwerk befinden. Verwenden Sie das Get-PSProvider Cmdlet, um die Anbieter auf Ihrem lokalen Computer anzuzeigen. Weitere Informationen finden Sie unter about_Providers.

PS> Set-Location -Path Alias:

PS> Get-Location

Path
----
Alias:\

PS> Get-ChildItem | Out-File -FilePath C:\TestDir\AliasNames.txt

PS> Get-Content -Path C:\TestDir\AliasNames.txt

CommandType     Name
-----------     ----
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           cat -> Get-Content

Der Set-Location Befehl verwendet den Parameter Path , um den aktuellen Speicherort auf den Registrierungsanbieter Alias:festzulegen. Das Get-Location Cmdlet zeigt den vollständigen Pfad für Alias:. Get-ChildItem sendet Objekte nach unten an das Out-File Cmdlet. Out-File verwendet den FilePath-Parameter , um den vollständigen Pfad und Dateinamen für die Ausgabe , C:\TestDir\AliasNames.txt anzugeben. Das Get-Content Cmdlet verwendet den Path-Parameter und zeigt den Inhalt der Datei in der PowerShell-Konsole an.

Beispiel 5: Festlegen der Dateiausgabebreite für den gesamten Bereich

In diesem Beispiel wird $PSDefaultParameterValues der Width Parameter für alle Aufrufe und Out-File die Umleitungsoperrtor (> und >>) auf 2000 festgelegt. Dadurch wird sichergestellt, dass überall innerhalb des aktuellen Bereichs, in dem Sie tabellenformatierte Daten in die Datei ausgeben, PowerShell eine Linienbreite von 2000 anstelle einer Zeilenbreite verwendet, die von der Konsolenbreite des PowerShell-Hosts bestimmt wird.

function DemoDefaultOutFileWidth() {
    try {
        $PSDefaultParameterValues['out-file:width'] = 2000

        $logFile = "$pwd\logfile.txt"

        Get-ChildItem Env:\ > $logFile

        Get-Service -ErrorAction Ignore |
            Format-Table -AutoSize |
            Out-File $logFile -Append

        Get-Process | Format-Table Id,SI,Name,Path,MainWindowTitle >> $logFile
    }
    finally {
        $PSDefaultParameterValues.Remove('out-file:width')
    }
}

DemoDefaultOutFileWidth

Weitere Informationen $PSDefaultParameterValuesfinden Sie unter about_Preference_Variables.

Parameter

-Append

Fügt die Ausgabe am Ende einer vorhandenen Datei hinzu.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

Gibt den Typ der Codierung für die Zieldatei an. Der Standardwert ist utf8NoBOM.

Die zulässigen Werte für diesen Parameter sind wie folgt:

  • ascii: Verwendet die Codierung für den ASCII-Zeichensatz (7-Bit).
  • bigendianunicode: Codiert im UTF-16-Format mit der Big-End-Byte-Reihenfolge.
  • bigendianutf32: Codiert im UTF-32-Format mithilfe der Big-End-Byte-Reihenfolge.
  • oem: Verwendet die Standardcodierung für MS-DOS- und Konsolenprogramme.
  • unicode: Codiert im UTF-16-Format mithilfe der Little-Endian-Bytereihenfolge.
  • utf7: Codiert im UTF-7-Format.
  • utf8: Codiert im UTF-8-Format.
  • utf8BOM: Codiert im UTF-8-Format mit Bytereihenfolgezeichen (BOM)
  • utf8NoBOM: Codiert im UTF-8-Format ohne Byte Order Mark (BOM)
  • utf32: Codiert im UTF-32-Format.

Ab PowerShell 6.2 ermöglicht der Encoding-Parameter auch numerische IDs registrierter Codeseiten (z -Encoding 1251. B. ) oder Zeichenfolgennamen registrierter Codeseiten (z -Encoding "windows-1251". B. ). Weitere Informationen finden Sie in der .NET-Dokumentation für Encoding.CodePage.

Hinweis

UTF-7* wird nicht mehr empfohlen, zu verwenden. Ab PowerShell 7.1 wird eine Warnung geschrieben, wenn Sie für den Codierungsparameter angebenutf7.

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:1
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

Gibt den Pfad zur Ausgabedatei an.

Type:String
Aliases:Path
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Force

Überschreibt das schreibgeschützte Attribut und überschreibt eine vorhandene schreibgeschützte Datei. Der Parameter Force überschreibt keine Sicherheitseinschränkungen.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Gibt die in die Datei zu schreibenden Objekte an. Geben Sie eine Variable ein, die die Objekte enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, durch den die Objekte abgerufen werden.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Gibt den Pfad zur Ausgabedatei an. Der LiteralPath-Parameter wird genau so verwendet, wie er eingegeben wird. Wild Karte Zeichen werden nicht akzeptiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren. Weitere Informationen finden Sie unter about_Quoting_Rules.

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoClobber

NoClobber verhindert, dass eine vorhandene Datei überschrieben wird und zeigt eine Meldung an, dass die Datei bereits vorhanden ist. Wenn eine Datei im angegebenen Pfad vorhanden ist, Out-File wird die Datei standardmäßig ohne Warnung überschrieben.

Type:SwitchParameter
Aliases:NoOverwrite
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoNewline

Gibt an, dass der in die Datei geschriebene Inhalt nicht mit einem Neuenlinezeichen endet. Die Zeichenfolgendarstellungen der Eingabeobjekte werden verkettet, um die Ausgabe zu bilden. Zwischen den Ausgabezeichenfolgen werden keine Leerzeichen oder Newlines eingefügt. Nach der letzten Ausgabezeichenfolge wird keine Neue zeile hinzugefügt.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Width

Gibt die maximale Anzahl von Zeichen in jeder Ausgabezeile an. Alle zusätzlichen Zeichen werden abgeschnitten und nicht umgebrochen. Wenn dieser Parameter nicht verwendet wird, wird die Breite durch die Merkmale des Hosts bestimmt. Die Standardeinstellung für die PowerShell-Konsole beträgt 80 Zeichen. Wenn Sie die Breite für alle Aufrufe sowie Out-File die Umleitungsoperatoren (> und >>), die vor der Verwendung Out-Filefestgelegt werden $PSDefaultParameterValues['out-file:width'] = 2000 möchten, steuern möchten.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

PSObject

Sie können jedes Objekt an dieses Cmdlet weiterleiten.

Ausgaben

None

Dieses Cmdlet gibt keine Ausgabe zurück.

Hinweise

Eingabeobjekte werden automatisch so formatiert, wie sie sich im Terminal befinden. Sie können jedoch ein Format-* Cmdlet verwenden, um die Formatierung der Ausgabe in der Datei explizit zu steuern. Beispiel: Get-Date | Format-List | Out-File out.txt

Verwenden Sie die Pipeline, um die Ausgabe eines PowerShell-Befehls an das Out-File Cmdlet zu senden. Alternativ können Sie Daten in einer Variablen speichern und den InputObject-Parameter verwenden, um Daten an das Out-File Cmdlet zu übergeben.

Out-File speichert Daten in einer Datei, erzeugt aber keine Ausgabeobjekte für die Pipeline.

PowerShell 7.2 hat die Möglichkeit hinzugefügt, zu steuern, wie ANSI-Escapesequenzen gerendert werden. AnSI-dekorierte Ausgabe, die übergeben Out-File wird, kann basierend auf der Einstellung der $PSStyle.OutputRendering Eigenschaft geändert werden. Weitere Informationen finden Sie unter about_ANSI_Terminals.