Hier ist eine Zusammenfassung dessen, was ich nach einigen Monaten Erfahrung mit PowerShell und einigen wissenschaftlichen Experimenten abgeleitet habe. Ich habe nichts davon in der Dokumentation gefunden :(
[ Update: Vieles davon scheint jetzt besser dokumentiert zu sein.]
Lese- und Schreibsperre
Während der Out-FileAusführung kann eine andere Anwendung die Protokolldatei lesen.
Während der Set-ContentAusführung können andere Anwendungen die Protokolldatei nicht lesen. So verwenden Sie niemalsSet-Content langen Lauf Befehle zu protokollieren.
Codierung
Out-FileSpeichert standardmäßig in der Unicode( UTF-16LE) - Codierung (obwohl dies angegeben werden kann), während in PowerShell 3+ Set-Contentstandardmäßig ASCII( US-ASCII) verwendet wird (dies kann auch angegeben werden). In früheren PowerShell-Versionen wurden Set-ContentInhalte in der Default(ANSI-) Codierung geschrieben.
Anmerkung der Redaktion : Powershell ab Version 5.1 immer noch standardmäßig auf die kulturspezifische Default( „ANSI“) kodiert, trotz allem , was der Dokumentation Ansprüche. Wenn ASCII die Standardeinstellung wäre, würden Nicht-ASCII-Zeichen üin Literal konvertiert ?, aber das ist nicht der Fall: 'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?'Ausbeuten $False.
PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt
Dies bedeutet, dass die Standardeinstellungen von zwei Befehlen nicht kompatibel sind. Wenn Sie sie mischen, wird der Text beschädigt. Geben Sie daher immer eine Codierung an.
Formatierung
Wie Bartek erklärte, Out-Filespeichert die ausgefallene Formatierung der Ausgabe, wie im Terminal zu sehen. In einem Ordner mit zwei Dateien erstellt der Befehl dir | out-file out.txteine Datei mit 11 Zeilen.
Während Set-Contentspart eine einfachere Darstellung. In diesem Ordner mit zwei Dateien erstellt der Befehl dir | set-content sc.txteine Datei mit zwei Zeilen. So emulieren Sie die Ausgabe im Terminal:
PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt
Ich glaube, diese Formatierung hat Konsequenzen für Zeilenumbrüche, kann sie aber noch nicht beschreiben.
Dateierstellung
Set-Contenterstellt nicht zuverlässig eine leere Datei, wenn Out-File:
In einem leeren Ordner erstellt der Befehl dir | out-file out.txteine Datei, dies dir | set-content sc.txtjedoch nicht.
Pipeline-Variable
Set-Contentnimmt den Dateinamen aus der Pipeline; So können Sie den Inhalt einer Reihe von Dateien auf einen festen Wert einstellen.
Out-Filenimmt die Daten wie aus der Pipeline; Aktualisieren des Inhalts einer einzelnen Datei.
Parameter
Set-Content enthält die folgenden zusätzlichen Parameter:
- Ausschließen
- Filter
- Einschließen
- Durchgehen
- Strom
- UseTransaction
Out-File enthält die folgenden zusätzlichen Parameter:
- Anhängen
- NoClobber
- Breite
Weitere Informationen zu diesen Parametern finden Sie in der Hilfe. zB get-help out-file -parameter append.
Set-ContentStandardcodierung: übersetzt in(Get-Culture).Textinfo.ANSICodePage(Windows 8.1, Powershell 4.0, CurrentCulturecs-CZ, CurrentUICultureen-GB, ANSICodePage1250, OEMCodePage852, getestet mit einer'řž'Zeichenfolge mit verschiedenen Codes auf den obigen Codepages).