Berikut ringkasan dari apa yang telah saya simpulkan, setelah pengalaman beberapa bulan dengan PowerShell, dan beberapa eksperimen ilmiah. Saya tidak pernah menemukan semua ini di dokumentasi :(
[ Pembaruan: Banyak dari ini sekarang tampaknya didokumentasikan dengan lebih baik.]
Membaca dan menulis penguncian
Saat Out-Filesedang berjalan, aplikasi lain dapat membaca file log.
Saat Set-Contentberjalan, aplikasi lain tidak dapat membaca file log. Jadi jangan pernah gunakanSet-Content untuk mencatat perintah yang berjalan lama.
Pengkodean
Out-Filemenyimpan dalam pengkodean Unicode( UTF-16LE) secara default (meskipun ini dapat ditentukan), sedangkan Set-Contentdefault ke ASCII( US-ASCII) dalam PowerShell 3+ (ini juga dapat ditentukan). Di versi PowerShell sebelumnya, Set-Contentmenulis konten dalam Defaultpengkodean (ANSI).
Catatan editor : PowerShell pada versi 5.1 masih secara default menggunakan Defaultpengkodean khusus budaya ("ANSI"), terlepas dari apa yang diklaim oleh dokumentasi. Jika ASCII adalah default, karakter non-ASCII seperti üakan dikonversi ke literal ? , tetapi tidak demikian: 'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?'hasil $False.
PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt
Ini berarti default dua perintah tidak kompatibel, dan mencampurkannya akan merusak teks, jadi selalu tentukan encoding.
Pemformatan
Seperti yang dijelaskan Bartek, Out-Filemenyimpan format keluaran yang mewah, seperti yang terlihat di terminal. Jadi dalam folder dengan dua file, perintah dir | out-file out.txtmembuat file dengan 11 baris.
Padahal Set-Contentmenyimpan representasi yang lebih sederhana. Di folder dengan dua file itu, perintah dir | set-content sc.txtmembuat file dengan dua baris. Untuk mengemulasi output di terminal:
PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt
Saya yakin pemformatan ini memiliki konsekuensi untuk jeda baris, tetapi saya belum bisa menjelaskannya.
Pembuatan file
Set-Contenttidak andal membuat file kosong ketika Out-File:
Dalam folder kosong, perintah dir | out-file out.txtmembuat file, sedangkan dir | set-content sc.txttidak.
Variabel Pipa
Set-Contentmengambil nama file dari pipa; memungkinkan Anda untuk mengatur sejumlah konten file ke beberapa nilai tetap.
Out-Filemengambil data dari pipeline; memperbarui konten satu file.
Parameter
Set-Content termasuk parameter tambahan berikut:
- Mengecualikan
- Saring
- Sertakan
- PassThru
- Aliran
- UseTransaction
Out-File termasuk parameter tambahan berikut:
- Menambahkan
- NoClobber
- Lebar
Untuk informasi lebih lanjut tentang apa saja parameter tersebut, silakan merujuk ke bantuan; mis get-help out-file -parameter append.
Set-Contentpengkodean default: diterjemahkan ke(Get-Culture).Textinfo.ANSICodePage(Windows 8.1, Powershell 4.0, CurrentCulturecs-CZ, CurrentUICultureen-GB, ANSICodePage1250, OEMCodePage852, diuji menggunakan'řž'string dengan kode berbeda di halaman kode di atas).