Oto podsumowanie tego, co wydedukowałem po kilku miesiącach doświadczeń z PowerShell i kilku eksperymentach naukowych. Nigdy nie znalazłem tego w dokumentacji :(
[ Aktualizacja: większość z tego wydaje się być teraz lepiej udokumentowana.]
Odczyt i zapis blokowania
Podczas Out-Filedziałania inna aplikacja może odczytać plik dziennika.
Podczas Set-Contentdziałania inne aplikacje nie mogą odczytać pliku dziennika. Dlatego nigdy nie używajSet-Content do rejestrowania długo działających poleceń.
Kodowanie
Out-Filezapisuje w kodowaniu Unicode( UTF-16LE) domyślnie (chociaż można to określić), podczas gdy Set-Contentdomyślnie jest to ASCII( US-ASCII) w PowerShell 3+ (można to również określić). We wcześniejszych wersjach programu PowerShell Set-Contentzapisano zawartość w Defaultkodowaniu (ANSI).
Uwaga edytora : PowerShell od wersji 5.1 nadal domyślnie korzysta z Defaultkodowania specyficznego dla kultury („ANSI”), pomimo tego, co twierdzi dokumentacja. Gdyby wartość ASCII była domyślna, znaki inne niż ASCII, takie jak, üzostałyby przekonwertowane na literał ? , ale tak nie jest : 'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?'yields $False.
PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt
Oznacza to, że wartości domyślne dwóch poleceń są niekompatybilne, a mieszanie ich spowoduje uszkodzenie tekstu, dlatego zawsze określaj kodowanie.
Formatowanie
Jak wyjaśnił Bartek, Out-Filezapisuje fantazyjne formatowanie wyjścia, jak widać na terminalu. Tak więc w folderze z dwoma plikami polecenie dir | out-file out.txttworzy plik z 11 wierszami.
Natomiast Set-Contentzapisuje prostszą reprezentację. W tym folderze z dwoma plikami polecenie dir | set-content sc.txttworzy plik z dwoma wierszami. Aby emulować wyjście w terminalu:
PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt
Uważam, że to formatowanie ma wpływ na podziały wierszy, ale nie mogę tego jeszcze opisać.
Tworzenie plików
Set-Contentnie tworzy niezawodnie pustego pliku, gdy Out-File:
W pustym folderze polecenie dir | out-file out.txttworzy plik, a dir | set-content sc.txtnie.
Zmienna rurociągu
Set-Contentpobiera nazwę pliku z potoku; pozwalając na ustawienie pewnej stałej wartości wielu plików.
Out-Filepobiera dane z rurociągu; aktualizacja zawartości pojedynczego pliku.
Parametry
Set-Content zawiera następujące dodatkowe parametry:
- Wykluczać
- Filtr
- Zawierać
- Przejść przez
- Strumień
- UseTransaction
Out-File zawiera następujące dodatkowe parametry:
- Dodać
- NoClobber
- Szerokość
Więcej informacji na temat tych parametrów można znaleźć w pomocy; np get-help out-file -parameter append.
Set-Contentdomyślne kodowanie: przetłumaczone na(Get-Culture).Textinfo.ANSICodePage(Windows 8.1, Powershell 4.0, CurrentCulturecs-CZ, CurrentUICultureen-GB, ANSICodePage1250, OEMCodePage852, testowane przy użyciu'řž'ciągu z różnymi kodami na powyższych stronach kodowych).