Magic Quadrant™ für Privileged Access Management 2025: Netwrix zum vierten Jahr in Folge anerkannt. Laden Sie den Bericht herunter.

Plattform
Ressourcen­zentrumBlog
PowerShell Write to File: "Out-File" und Dateiausgabetechniken

PowerShell Write to File: "Out-File" und Dateiausgabetechniken

Nov 21, 2024

Die PowerShell-Ausgabe erfolgt standardmäßig auf die Konsole, aber Sie können Ergebnisse umleiten, um sie in Dateien für Protokollierung, Berichterstattung, Automatisierung oder Fehlerbehebung zu speichern. Das Cmdlet Out-File bietet vollständige Kontrolle über Kodierung, Zeilenbreite und Überschreibverhalten, während Umleitungsoperatoren (>, >>) schneller für einfache Aufgaben sind. Alternativen wie Set-Content, Add-Content, oder sogar Export-Csv/ConvertTo-Json sind besser, wenn Sie strukturierte Daten benötigen. Verwenden Sie -Append , -NoClobber, Test-Path, und Fehlerumleitung (2>, 3>) um Logs sicher zu verwalten.

Einführung in die Ausgabe in PowerShell

Jeder, der mit PowerShell vertraut ist, weiß, dass die Ausgabe von PowerShell-Befehlen standardmäßig im Terminal angezeigt wird. Es kann jedoch Situationen geben, in denen man die Ausgabe umleiten oder in einer Datei speichern möchte.

  • Befehle können eine große Menge an Daten zurückgeben, die in Echtzeit schwer zu handhaben sind. Sie können diese Daten umleiten oder speichern, um sie nach Belieben zu verarbeiten oder zu überprüfen.
  • Um die Ergebnisse eines Befehls in einem anderen Prozess oder Skript zu verwenden, können Sie den PowerShell-Befehl zur Ausgabe in eine Datei verwenden, um die Ausgabe in einer Datei oder Variablen zu speichern und so leicht wiederverwenden zu können.
  • Geplante Aufgaben oder andere automatisierte Prozesse laufen normalerweise oft im Hintergrund. Da Sie die Ausgabe nicht in Echtzeit sehen können, ermöglicht das Speichern Ihnen, diese später zu überprüfen.
  • Manchmal kann die Ausgabe mehr Informationen enthalten, als Sie benötigen. Sie können sie daher umleiten oder speichern, um sie zu filtern und zu formatieren.
  • Wenn Sie Befehle auf entfernten Systemen ausführen, haben Sie möglicherweise keinen Zugriff auf die Konsole, um die Ausgabe in Echtzeit zu sehen. Das Speichern oder Umleiten bietet Ihnen einen Nachweis darüber, was auf dem entfernten System passiert ist.
  • Organisationen erstellen Berichte basierend auf Systemzuständen, Konfigurationen oder Leistungskennzahlen. Mit PowerShell können sie Systemdaten abfragen, Berichte generieren und diese zur zukünftigen Überprüfung in eine Datei ausgeben.
  • PowerShell kann verwendet werden, um Hardware- und Softwareinventarinformationen für Asset-Management und Compliance zu sammeln. Diese Daten können dann in eine Datei ausgegeben werden, um die Sichtbarkeit zu erhöhen und das Management zu vereinfachen.
  • Beim Automatisieren von Aufgaben ist es wesentlich, die durchgeführten Aktionen und die Ergebnisse zu verfolgen. Die Umleitung der Ausgabe in eine Datei hilft dabei, Protokolle für die Überprüfung zu erstellen.
  • Wenn ein Skript fehlschlägt, müssen Sie die Ursache kennen. Indem Sie die Ausgabe speichern, können Sie sie später zur Fehlerbehandlung, zum Debuggen und zur Fehlerbehebung überprüfen.

Kurz gesagt, das Umleiten oder Speichern von PowerShell-Ausgaben steigert die Produktivität, hilft beim Debuggen, liefert nützliche Protokolle und erleichtert die Automatisierung, insbesondere bei komplexen Arbeitsabläufen oder der Arbeit mit großen Datensätzen.

Kernmethoden zum Ausgeben von PowerShell-Ergebnissen in Dateien

Das Out-File Cmdlet

Die PowerShell-Methode zum Schreiben in eine Textdatei verwendet häufig das Out-File-Cmdlet, um Befehlsergebnisse (Ausgabe) direkt in eine Datei zu senden. In seiner einfachsten Form erfordert Out-File die Angabe eines Pfades und Dateinamens, um die Ausgabe zu schreiben.

Standardmäßig überschreibt das Cmdlet eine vorhandene Datei, wenn eine Datei mit demselben Namen unter dem angegebenen Pfad existiert, oder erstellt eine neue, wenn sie nicht existiert.

Out-File Syntax

Hier ist die grundlegende Syntax für das Out-File-Cmdlet:

      Out-File
[-FilePath] <cadena>
[[-Encoding] <Encoding>]
[-Append]
[-Force]
[-NoClobber]
[-Width <int>]
[-NoNewline]
[-InputObject <psobject>]
[-WhatIf]
[-Confirmar]
[<CommonParameters>]
      

Parameter

Das PowerShell Out-File Cmdlet akzeptiert die folgenden Parameter:

Parameter

Beschreibung

-Filepath

Legt den Pfad und den Namen der Ausgabedatei fest

-Encoding <Encoding>

Legt die Kodierung für die Ausgabedatei fest. Optionen beinhalten ASCII, UTF8, UTF7, Unicode usw. Der Standardwert ist utf8NoBOM.

-Anhängen

Fügt die Ausgabe am Ende der Datei hinzu, ohne vorhandene Inhalte zu überschreiben

-Force

Überschreibt das schreibgeschützte Attribut und überschreibt eine vorhandene schreibgeschützte Datei. Dieser Parameter hebt keine Sicherheitsbeschränkungen auf.

-NoClobber

Verhindert das Überschreiben einer vorhandenen Datei. Standardmäßig wird eine Datei im angegebenen Pfad von dem Out-File-Cmdlet ohne Warnung überschrieben.

-Breite

Begrenzt die Anzahl der Zeichen pro Zeile in der Ausgabedatei (Standardwert 80). Alle zusätzlichen Zeichen werden abgeschnitten, nicht umgebrochen.

-NoNewLine

Gibt an, dass der Inhalt, der in die Ausgabedatei geschrieben wird, nicht mit einem Zeilenumbruch endet. Es werden keine Leerzeichen oder Zeilenumbrüche zwischen den Ausgabezeichenfolgen eingefügt und nach der letzten Ausgabezeichenfolge wird kein Zeilenumbruch hinzugefügt.

-InputObject

Gibt die Objekte an, die in die Datei geschrieben werden sollen. Geben Sie einen Befehl oder Ausdruck ein, der die Objekte abruft, oder geben Sie eine Variable ein, die die Objekte enthält.

-WhatIf

Führt das Cmdlet im Testmodus aus, um die erwarteten Ergebnisse des Cmdlets anzuzeigen

-Bestätigen

Fordert eine Bestätigung an, bevor das Cmdlet ausgeführt wird

Anwendungsfälle

Um die Ausgabe direkt in eine Datei zu schreiben, anstatt sie auf dem Bildschirm anzuzeigen, können Sie den PowerShell-Befehl zur Ausgabe in eine Datei verwenden, indem Sie das Out-File-Cmdlet an einen PowerShell-Befehl oder eine Variable anhängen. Diese Technik funktioniert auch, um eine Textzeichenfolge in eine Datei zu schreiben, indem Sie Out-File direkt an die Zeichenfolge anhängen.

Fügen Sie Out-File an ein PowerShell-Cmdlet an

Um eine Liste der laufenden Prozesse abzurufen und die PowerShell-Ausgabe-in-Datei-Methode zu verwenden, speichern Sie die Ausgabe in einer Textdatei namens „Processes“ im Ordner C:\Temp mit dem folgenden Beispiel:

Get-Process | Out-File -FilePath C:\Temp\processes.txt

Hier listet das Get-Process-Cmdlet alle laufenden Prozesse auf. Mit der PowerShell-Pipe-Ausgabe-zu-Datei-Funktionalität können Sie die Befehlsausgabe nehmen und sie sofort in einer Textdatei speichern, um sie später zu analysieren.

Fügen Sie Out-File an eine Textzeichenfolge an

Um eine Zeichenkette mit der PowerShell-Methode zum Schreiben von Zeichenketten in eine Datei zu verwenden, wie zum Beispiel das Hinzufügen von „Hello, World!“ zu einer Textdatei namens „Test“ am Speicherort C:\Temp, verwenden Sie das folgende Cmdlet:

"Hallo, Welt!" | Out-File -FilePath C:\Temp\Test.txt

Wenn die Datei nicht existiert, wird sie erstellt. Wenn sie existiert, wird der Inhalt standardmäßig überschrieben.

Eine Variable mit Out-File anhängen

Sie können auch das Out-File-Cmdlet mit einer Variablen verwenden. Zum Beispiel:

$variable | Out-File -FilePath "C:\path\to\file.txt"

Hier ist $variable die Variable, die die Daten hält (z.B. eine PowerShell-Ausgabe in eine Textdatei oder Befehlsausgabe), die Sie in eine Datei senden möchten.

Umleitungsoperatoren (> und >>)

Umleitungsoperatoren (> und >>) in PowerShell sind eine einfache und schnelle Alternative zum Out-File-Cmdlet, die es Ihnen ermöglichen, Ausgaben in eine Datei umzuleiten.

  • Der > Operator entspricht dem Out-File-Cmdlet ohne zusätzliche Parameter. Er überschreibt die Datei, wenn sie existiert, oder erstellt eine neue, wenn sie nicht existiert.
  • Der >> Operator entspricht Out-File -Append. Er hängt die Ausgabe an die Datei an, wenn sie existiert, oder erstellt eine neue, wenn sie nicht existiert.

Diese Operatoren haben auch andere Verwendungen, wie das Umleiten von Fehler- oder ausführlichen Ausgabeströmen, was jedoch über den Rahmen dieses Artikels hinausgeht.

Grundlegende Syntax

Die grundlegende Syntax zur Verwendung der Operatoren lautet wie folgt:

<Command> > <Pfad> # Überschreibt

<Command> >> <Path> # Anhängen

Beachten Sie, dass die Umleitungsoperatoren keine Parameter verwenden.

Beispiel 1 – Verwendung des >-Operators

Dieses Cmdlet schreibt die Ausgabe von Get-Process in die Datei Processes.txt und überschreibt dabei jeglichen vorhandenen Inhalt, falls eine Datei mit diesem Namen bereits am Zielort existiert.

Get-Process > C:\Temp\Processes.txt

Beispiel 2 – Verwendung des >>-Operators

Dieses Cmdlet fügt das aktuelle Datum und die Uhrzeit am Ende der log.txt-Datei hinzu, ohne vorhandene Inhalte zu überschreiben.

Get-Date >> C:\Temp\log.txt

Wenn eine Datei namens log.txt unter dem angegebenen Pfad nicht existiert, wird die Datei erstellt und das aktuelle Datum sowie die Uhrzeit werden hineingeschrieben.

Out-File-Cmdlet im Vergleich zu Umleitungsoperatoren (> und >>)

Sowohl das Out-File-Cmdlet als auch die Umleitungsoperatoren können die PowerShell-Ausgabe in eine Datei schreiben und anhängen. Die Schlüsselunterschiede zwischen den beiden werden unten diskutiert.

Feature

Out-File Cmdlet

Umleitungsoperatoren (> und >>)

Parameter

Akzeptiert Parameter

Akzeptiert keine Parameter

Überschreibverhalten

Standardmäßig wird überschrieben; verwenden Sie -Append zum Anhängen und -NoClobber, um ein Überschreiben zu vermeiden

> überschreibt, >> hängt an Keine integrierte Kontrolle, um Überschreiben zu verhindern

Kodierungskontrolle

Ermöglicht die Angabe der Kodierung mit -Encoding

Begrenzte Kodierungskontrolle (UTF-8 in PowerShell 6+, Unicode in älteren Versionen)

Width Control

Supports setting line width with -Width

No control over line width

Error Handling

Only successful results are exported, so warnings or errors are not written to the file

Can specify which stream you want to export, like success, error, warning, etc.

Usage in Scripts

Best for scripts that require more control over output

Quick and convenient for simple redirection

When to Use Each

In comparison, the Out-File cmdlet is more versatile and ideal for complex scripts, with options for encoding, width, and overwrite control. Redirection operators, however, are fast and convenient for quick output jobs that do not require customization. Following is a brief guide on when you should use each.

When to use the Out-File cmdlet

  • For specific encoding (e.g., ASCII, UTF8, Unicode)
  • To avoid overwriting files (using -NoClobber)
  • For control over the line width of output (using -Width)
  • In append mode while maintaining other output control options

When to use > and >>

  • When you want quick redirection for output without additional formatting or encoding
  • When overwriting (>) or appending (>>) the existing file is desired

Advanced File Output Techniques

Manage Overwrites

By default, the Out-File cmdlet overwrites an existing file if one by the same name exists at the specified path, or creates a new file if it does not.

To prevent overwriting an existing file, you can use the PowerShell write to file append method in one of two ways:

  • Add (append) the output to the existing file
  • Prevent overwrite, with the result that the existing file will not be overwritten and the output will not be saved to file

Append Output

Use the -Append parameter with the Out-File cmdlet to add the new output to the end of the specified file without overwriting its existing content. This is particularly useful when, for example, you want to log events incrementally without losing previous data.

This command appends the five most recent entries from the System log to the event_log.txt file.

Get-EventLog -LogName System -Newest 5 | Out-File -FilePath C:\Temp\event_log.txt -Append

You can also use the redirection operator >> to append output to an existing file. In the following example, the status and details of services on your local machine are appended to the contents in the log.txt file.

Get-Service >> C:\Temp\log.txt

Prevent Overwrite

Use the -NoClobber parameter with the Out-File cmdlet to prevent overwrites. Hence, if a file with the same name exists at the specified location, PowerShell will not overwrite it and throw an error. This helps protect important files.

The following command will attempt to create a file named log.txt in the Temp folder. But if a file by this name already exists, an error will be displayed and the output will not be saved to file.

Get-Service | Out-File -FilePath C:\Temp\log.txt -NoClobber

Image

Force Overwrite

Sometimes you are unable to overwrite the contents of an existing file with the output of a PowerShell cmdlet, as the file is read-only. In a situation such as this, use the -Force parameter with the Out-File cmdlet to overwrite read-only files.

This cmdlet writes the services information to the Services.txt file, ensuring that if the Services.txt already exists, it will be overwritten, even if it is read-only.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Force

Output Formatting and Encoding

PowerShell’s Out-File cmdlet provides options to customize output formatting and encoding.

Format Output

The Out-File cmdlet may not display output as expected, particularly when the output has multiple columns. For a formatted, readable output, you can adjust the width or use the Format-Table cmdlet.

Example 1 – Set the Width

Use the -Width parameter with Out-File to specify the line width for the output file (80 characters is default).

This cmdlet writes the services information to the Services.txt file, while setting the line width to 200 characters. This allows for wider output without wrapping.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Width 200

Example 2 – Format with Format-Table

Use the Format-Table cmdlet to structure data before sending it to the Out-File cmdlet.

This cmdlet uses Format-Table -AutoSize to adjust the column widths automatically for readability.

Get-Service | Format-Table -AutoSize | Out-File -FilePath C:\Temp\Services.txt

Set Encoding

Encoding output in PowerShell when using the Out-File cmdlet ensures that the data is correctly interpreted, displayed, and compatible across different systems and applications.

The -Encoding parameter helps specify how output text is encoded in the file. Common encoding types include:

  • UTF8 – Common for web applications, supports all characters.
  • ASCII – Limited to basic English characters, compact but restrictive.
  • Unicode (UTF-16) – Good for Windows compatibility, can handle a wide range of special characters, symbols, and international text, but uses more space.
  • Default – Uses the system’s default encoding, which might vary and can be unpredictable across platforms.

Example 1 — Use UTF-8 Encoding

It is a good idea to use UTF-8 encoding if the output file contains special characters or the file will be used in environments where UTF-8 is the standard encoding.

This cmdlet retrieves a list of services on the system and outputs the information to the Services.txt file while setting the file encoding to UTF-8.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding UTF8

Example 2 — Use ASCII Encoding

ASCII encoding is commonly used for simpler text files.

This cmdlet retrieves a list of services on the system and pipes the outputs to the Services.txt file. The -Encoding parameter is used to convert the output to ASCII format.

Get-Service | Out-File -FilePath C:\Temp\Services.txt -Encoding ASCII

Handling Specific Output Streams

The Out-File cmdlet writes the successful result of your command or script to a file. But it does not write errors, warnings, or specific types of messages to files. This can be achieved with the redirect operator, that enables you to specify which stream you want to output to a file.

Operator

Description / Stream

Write cmdlet

>

Success only

Write-Output

2>

Error only

Write-Error

3>

Warning only

Write-Warning

4>

Verbose only

Write-Verbose

5>

Debug only

Write-Debug

6>

Information only

Write-Information

*>

All

Example 1 — Send error messages to file

This command attempts to list (ls) a file named Readme. It looks for the file in the current directory if you do not specify a path. If the file does not exist, it generates an error message. The 2> operator redirects this error to a file called error.log. As a result, the error is not displayed on screen but saved in error.log in the Temp folder.

ls Readme 2> C:\Temp\error.log

Image

Example 2 — Send Warnings to file

In PowerShell, the warning stream is stream number 3. You can use 3> to redirect warnings to a file: It is as:

# Command that generates a warning

<Your-Command> 3> C:\Temp\warning_log.txt

Alternative Methoden für die Ausgabe

Set-Content- und Add-Content-Cmdlets

Die Cmdlets Set-Content und Add-Content sind eine weitere Möglichkeit, Ausgaben in eine Datei zu schreiben.

  • Set-Content überschreibt den vorhandenen Inhalt der Datei mit dem neuen angegebenen Inhalt. Wenn die Datei nicht existiert, wird sie erstellt.
  • Add-Content hängt neuen Inhalt an das Ende des vorhandenen Dateiinhalts an. Wenn die Datei nicht existiert, wird sie erstellt, jedoch kein bestehender Inhalt ersetzt.

Das Cmdlet Set-Content

Verwenden Sie das Cmdlet Set-Content, um den Inhalt einer Datei mit neuem Inhalt zu schreiben oder zu ersetzen.

Dieses Cmdlet überschreibt den vorhandenen Inhalt in der Datei Test.txt. Der Parameter -Value gibt den Inhalt oder Text an, der den vorhandenen Inhalt ersetzt

Set-Content -Path C:\Temp\Test.txt -Value "Add content here"

Das Cmdlet Add-Content

Verwenden Sie das Cmdlet Add-Content, um Inhalt zu einer Datei hinzuzufügen. Das bedeutet, dass Sie neue Daten an eine vorhandene Datei anhängen können, ohne sie zu überschreiben. Add-Content kann auch Inhalt gleichzeitig an mehrere Dateien anhängen.

Wie das Cmdlet Out-File und der Umleitungsoperator erstellt Add-Content eine neue Datei, wenn keine Datei mit demselben Namen existiert.

Beispiel 1 — Text an eine Datei anhängen

Dieses Cmdlet fügt neuen Text zur Datei Test.txt hinzu. Der Parameter -Value gibt den Inhalt oder Text an, den Sie an die Datei anhängen möchten.

Add-Content -Path C:\Temp\Test.txt -Value "New line to add"

Wenn die Datei schreibgeschützt ist, müssen Sie den Parameter -Force verwenden, um das Hinzufügen von Inhalt zu ermöglichen.

Beispiel 2 — Fügen Sie Text zu mehreren Dateien hinzu

Um denselben Inhalt zu mehreren Dateien hinzuzufügen, haben Sie mehrere Optionen.

  • Verwenden Sie Platzhalter im Pfad, um die Dateien anzugeben, die Sie aktualisieren möchten
  • Schließen Sie Dateinamen aus, die Sie nicht aktualisieren möchten

Dieses Cmdlet fügt das aktuelle Datum zu allen .txt-Dateien im Temp-Ordner hinzu, außer in der Datei mit test im Dateinamen:

Add-Content -Path C:\Temp\files\*.txt -Value (Get-Date) -Exclude "test*"

Beispiel 3 — Mehrere Zeilen Text hinzufügen

Dieser Befehl fügt dem Test.txt-Datei mehrere Zeilen Text hinzu.

      $lines = @(
"Line 1: Details",
"Line 2: Specific Details"
)
Add-Content -Path C:\Temp\Test.txt -Value $lines
      

.Net-Klassen

Sie können .NET-Klassen verwenden, um Ausgaben in eine Datei zu schreiben, insbesondere in fortgeschrittenen Szenarien mit umfangreicher Datenverarbeitung. Diese Klassen sind:

  • BinaryWriter – Schreibt primitive Datentypen in binärer Form in einen Stream.
  • StreamWriter – Wird zum Schreiben von Zeichen in einem bestimmten Encoding in einen Stream verwendet. Oft genutzt zum Erstellen oder Modifizieren von Textdateien.
  • StringWriter – schreibt Informationen in einen String. Mit dieser Klasse speichert PowerShell die String-Informationen in einem StringBuilder-Objekt.

Die Verwendung der StreamWriter-Klasse in C# zur Ausgabe in eine Datei ist unkompliziert. Das folgende Beispiel zeigt, wie Sie sie nutzen können.

      # Get the directories in C:\
$Dirs = Get-ChildItem -Path C:\ -Directory
# Open a stream writer
$File = 'C:\Temp\Dirs.txt'
$Stream = [System.IO.StreamWriter]::new($File)
# Write the folder names for these folders to the file
foreach($Dir in $Dirs) {
$Stream.WriteLine($Dir.FullName)
}
# Close the stream
$Stream.Close()
      

Dieses Skript führt die folgenden Schritte aus, um Verzeichnisse auf dem C:\-Laufwerk aufzulisten und ihre Pfade in einer Textdatei zu speichern:

Schritt 1:

$Dirs = Get-ChildItem -Path C:\ -Directory

Diese Zeile verwendet Get-ChildItem mit dem -Directory Parameter, um nur die Verzeichnisse (nicht Dateien) im C:\ Laufwerk zu erhalten. Das Ergebnis wird in der $Dirs Variablen als Liste von Verzeichnisobjekten gespeichert.

Schritt 2:

$File = 'C:\Temp\Dirs.txt'

$Stream = [System.IO.StreamWriter]::new($File)

Diese Zeilen richten einen Dateipfad (C:\Temp\Dirs.txt) ein, wo die Verzeichnisliste gespeichert wird, und initialisieren dann ein StreamWriter-Objekt, um in diese Datei zu schreiben. Dieses Objekt wird $Stream zugewiesen.

Schritt 3:

foreach($Dir in $Dirs) {

$Stream.WriteLine($Dir.FullName)

}

Diese Schleife durchläuft jedes Verzeichnisobjekt in $Dirs. Für jedes Verzeichnis schreibt sie den vollständigen Pfad ($Dir.FullName) in die Datei, indem $Stream.WriteLine verwendet wird.

Schritt 4:

$Stream.Close()

Nachdem alle Verzeichnispfade geschrieben wurden, schließt das Skript den StreamWriter.

Vereinbaren Sie eine persönliche Demo für Netwrix Directory Manager:

Best Practices für die PowerShell-Dateiausgabe

Stellen Sie die richtige Zeilenbreite ein, um Abschneidungen zu vermeiden

Sie sollten die korrekte Zeilenbreite mit dem -Width Parameter in PowerShell einstellen, um das Abschneiden langer Zeilen zu verhindern und sicherzustellen, dass Dateiausgaben wie beabsichtigt formatiert werden.

Der -Width-Parameter im Out-File-Cmdlet steuert die maximale Anzahl von Zeichen pro Zeile in der Ausgabe. Standardmäßig ist er auf 80 Zeichen eingestellt, was längere Zeilen abschneiden kann. Sie können beispielsweise die Breite auf 200 Zeichen erhöhen, wie unten gezeigt:

Get-Process | Out-File -FilePath "output.txt" -Width 200

Betrachten Sie Folgendes:

  • Um unnötige Leerzeichen oder Abschneidungen zu vermeiden, stellen Sie eine -Breite ein, die der längsten Zeile entspricht. Für die meisten Ausgaben sollte eine Breite von 120–200 Zeichen gut funktionieren.
  • Für Daten mit vielen Spalten (wie bei einer CSV-Datei) stellen Sie eine größere Breite ein, um die ganze Zeile unterzubringen.
  • In einer Pipeline verwenden Sie Out-String -Width, um die Zeilenbreite zu steuern, sodass die gesamte Zeile in die angegebene Breite passt, bevor sie an Out-File weitergeleitet wird.

Stellen Sie die richtige Kodierung ein

Die standardmäßige Kodierung, die PowerShell verwendet, variiert je nach Cmdlet und der verwendeten PowerShell-Version. Die folgende Tabelle zeigt die standardmäßig verwendete Kodierung:

Cmdlet / Operator


PowerShell 5.1 (und frühere) Standardkodierung


PowerShell Core / PowerShell 7+ Standardkodierung


Out-File, Set-Content, Add-Content


UTF-16LE (Unicode)


UTF-8 (kein BOM)


>, >> (Umleitung)


ASCII


UTF-8 (No BOM)


UTF-8-Codierung wird für die Kompatibilität zwischen Systemen empfohlen. Für ältere Systeme möchten Sie jedoch möglicherweise -Encoding ASCII oder -Encoding Unicode angeben.

Verwenden Sie $PSDefaultParameterValues, um Standardwerte in Skripten festzulegen

$PSDefaultParameterValues in PowerShell ermöglicht es Ihnen, Standardwerte für Parameter über Skripte und Sitzungen hinweg festzulegen, um Konsistenz zu gewährleisten, ohne Optionen wiederholt anzugeben.

Hier erfahren Sie, wie Sie global UTF8-Kodierung und eine breitere Breite als Standard für Out-File festlegen können.

$PSDefaultParameterValues["Out-File:Encoding"] = "UTF8"

$PSDefaultParameterValues["Out-File:Width"] = 200

Kombinieren Sie Out-File mit Format-Table und Format-List für eine besser strukturierte Ausgabe

Die Kombination des Out-File-Cmdlets mit Format-Table oder Format-List ist eine hervorragende Möglichkeit, gut strukturierte, lesbare Textausgabedateien zu erstellen.

Format-Table

Format-Table eignet sich am besten für Daten mit einer klaren Zeilen- und Spaltenstruktur. Es erstellt ein organisiertes, leicht zu lesendes tabellenähnliches Format. Beachten Sie jedoch Folgendes, wenn Sie es mit dem Out-File-Cmdlet verwenden:

  • Verwenden Sie den -Property Parameter, um nur die Spalten anzugeben, die Sie benötigen. Dies verhindert Unordnung in der Ausgabedatei.
  • Verwenden Sie den -AutoSize Parameter, um die Spaltenbreite an den Inhalt anzupassen. Dies wird überflüssige Leerzeichen oder Abschneidungen reduzieren.
  • Verwenden Sie den -Width Parameter, um eine Abschneidung zu verhindern und die Ausgabe ausgerichtet zu halten.

Hier ist ein Beispiel:

Get-Process | Format-Table -Property Name, ID, CPU, WS -AutoSize | Out-File -FilePath "ProcessList.txt" -Width 200

Format-List

Format-List zeigt Daten vertikal an, mit einer Eigenschaft pro Zeile. Verwenden Sie es, wenn Sie viele Eigenschaften oder Felder mit langen Werten haben, um eine Abschneidung dieser Werte zu vermeiden. Dieses Format eignet sich für Berichte und detaillierte Protokolle.

Hier ist ein Beispiel für die Verwendung von Format-List mit Out-File:

Get-Process | Format-List -Property Name, ID, CPU, StartTime | Out-File -FilePath "DetailedProcessList.txt"

Wählen Sie, wie bei Format-Table, nur die Eigenschaften aus, die Sie benötigen.

Verhindern Sie Dateikonflikte, indem Sie Test-Path verwenden, um zu überprüfen, ob Dateien existieren, bevor Sie schreiben

Es ist immer ratsam zu überprüfen, ob eine Datei existiert, bevor man versucht, in sie zu schreiben. Auf diese Weise können Sie versehentliche Überschreibungen vermeiden und entscheiden, was zu tun ist, wenn eine Datei bereits existiert. Das Cmdlet Test-Path in PowerShell ermöglicht es Ihnen, die Existenz einer Datei zu überprüfen.

Folgende Schritte sollten Sie befolgen:

  1. Weisen Sie den Dateipfad einer Variablen zu.
  2. Verwenden Sie das Test-Path-Cmdlet, um zu überprüfen, ob die Datei existiert.
  3. Entscheiden Sie, ob Sie anhängen, überschreiben, umbenennen oder das Schreiben überspringen möchten.
  4. Verwenden Sie das Out-File-Cmdlet, um die Datei zu erstellen oder in sie zu schreiben.

Häufige Fallstricke und Lösungen

Das Out-File-Cmdlet in PowerShell kann manchmal zu häufigen Fallstricken führen, insbesondere im Umgang mit Dateien, Kodierung und dem Anhängen von Inhalten. Einige häufige Probleme und deren Lösungen werden unten diskutiert.

Vermeiden Sie Datenverlust durch Überschreiben

Standardmäßig überschreibt das Out-File-Cmdlet den Inhalt einer vorhandenen Datei ohne Warnung, wenn bereits eine Datei mit demselben Namen existiert. Einige Möglichkeiten, dies zu vermeiden, sind:

  • Fügen Sie die Ausgabe mit dem -Append Parameter der bestehenden Datei hinzu, anstatt sie zu überschreiben.
  • Überprüfen Sie, ob die Datei mit Test-Path existiert und entscheiden Sie, wie Sie mit Out-File fortfahren möchten.

Vermeiden Sie Datenverlust durch unsachgemäße Kodierung

Standardmäßig verwendet Out-File in PowerShell 5.1 und früheren Versionen Unicode-Kodierung. In PowerShell Core und späteren Versionen wird UTF-8-Kodierung verwendet.

Die Standardkodierung ist möglicherweise nicht mit Ihrem System oder Anwendungen kompatibel, die eine andere Kodierung erwarten. Daher sollten Sie die Kodierung explizit mit dem -Encoding Parameter angeben.

Verwalten Sie die Ausgabe in lang laufenden Skripten, um die Leistung zu gewährleisten

In eingeschränkten Umgebungen wie PowerShell ISE kann das Ausführen von Skripten mit dem Out-File-Cmdlet zu Problemen führen, wie zum Beispiel:

  • Fehler beim Umgang mit komplexen Datenstrukturen wie erwartet
  • Kürzung von langen Ausgaben

Um lange Ausgaben zu verwalten, können Sie:

  • Verwenden Sie den -Width Parameter, um eine geeignete Breite festzulegen
  • Exportieren Sie komplexe Daten in strukturierte Formate wie CSV oder JSON mit den Cmdlets Export-Csv oder ConvertTo-Json

Behandeln Sie das Protokollieren und Fehlerbehandlung in PowerShell-Skripten

Manchmal ist eine Datei in Gebrauch oder von einem anderen Prozess gesperrt. In diesem Fall wird das Out-File-Cmdlet einen Fehler ausgeben, da es nicht in der Lage sein wird, darauf zu schreiben. Sie können diesen und andere Fehler mit einem try/catch-Block behandeln. Ein Beispiel ist wie folgt:

      $content = "Write content to file"
$filePath = "C:\Temp\Errors.txt"
try {
$content | Out-File -FilePath $filePath
Write-Host "File written successfully."
} catch {
Write-Host "File is in use or locked by another process."
}
      

FAQ

Teilen auf

Erfahren Sie mehr

Über den Autor

Asset Not Found

Tyler Reese

VP of Product Management, CISSP

Mit mehr als zwei Jahrzehnten in der Software-Sicherheitsbranche ist Tyler Reese bestens vertraut mit den sich schnell entwickelnden Identitäts- und Sicherheitsherausforderungen, denen Unternehmen heute gegenüberstehen. Derzeit ist er als Produktleiter für das Netwrix Identity and Access Management Portfolio tätig, wo seine Aufgaben die Bewertung von Markttrends, die Festlegung der Richtung für die IAM-Produktlinie und letztendlich die Erfüllung der Bedürfnisse der Endanwender umfassen. Seine berufliche Erfahrung reicht von IAM-Beratung für Fortune-500-Unternehmen bis hin zur Arbeit als Unternehmensarchitekt eines großen Direkt-an-Verbraucher-Unternehmens. Derzeit hält er die CISSP-Zertifizierung.