Dưới đây là bản tóm tắt những gì tôi đã suy luận, sau vài tháng trải nghiệm với PowerShell và một số thử nghiệm khoa học. Tôi chưa bao giờ tìm thấy bất kỳ điều nào trong số này trong tài liệu :(
[ Cập nhật: Phần lớn điều này bây giờ dường như được ghi lại tốt hơn.]
Khóa đọc và ghi
Trong khi Out-Fileđang chạy, một ứng dụng khác có thể đọc tệp nhật ký.
Trong khi Set-Contentđang chạy, các ứng dụng khác không thể đọc tệp nhật ký. Vì vậy, không bao giờ sử dụngSet-Content để ghi các lệnh chạy dài.
Mã hóa
Out-Filelưu trong mã hóa Unicode( UTF-16LE) theo mặc định (mặc dù điều này có thể được chỉ định), trong khi Set-Contentmặc định là ASCII( US-ASCII) trong PowerShell 3+ (điều này cũng có thể được chỉ định). Trong các phiên bản PowerShell trước đó, Set-Contentđã viết nội dung ở dạng Defaultmã hóa (ANSI).
Lưu ý của người biên tập : PowerShell kể từ phiên bản 5.1 vẫn mặc định là mã hóa dành riêng cho văn hóa Default("ANSI"), bất chấp những gì tài liệu tuyên bố. Nếu ASCII là mặc định, các ký tự không phải ASCII chẳng hạn üsẽ được chuyển đổi thành nghĩa đen ? , nhưng đó không phải là trường hợp: kết 'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?'quả $False.
PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt
Điều này có nghĩa là mặc định của hai lệnh không tương thích và việc trộn chúng sẽ làm hỏng văn bản, vì vậy hãy luôn chỉ định một mã hóa.
Định dạng
Như Bartek đã giải thích, Out-Filelưu định dạng ưa thích của đầu ra, như đã thấy trong thiết bị đầu cuối. Vì vậy, trong một thư mục có hai tệp, lệnh dir | out-file out.txttạo một tệp có 11 dòng.
Trong khi Set-Contenttiết kiệm một biểu diễn đơn giản hơn. Trong thư mục đó có hai tệp, lệnh dir | set-content sc.txttạo một tệp có hai dòng. Để mô phỏng đầu ra trong thiết bị đầu cuối:
PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt
Tôi tin rằng định dạng này có hậu quả là ngắt dòng, nhưng tôi chưa thể mô tả nó.
Tạo tệp
Set-Contentkhông đáng tin cậy tạo một tệp trống khi Out-File:
Trong một thư mục trống, lệnh dir | out-file out.txttạo một tệp, trong khi dir | set-content sc.txtthì không.
Biến đường ống
Set-Contentlấy tên tệp từ đường ống; cho phép bạn đặt một số nội dung của tệp thành một số giá trị cố định.
Out-Filelấy dữ liệu từ đường ống; cập nhật nội dung của một tệp duy nhất.
Thông số
Set-Content bao gồm các thông số bổ sung sau:
- Loại trừ
- Bộ lọc
- Bao gồm
- PassThru
- Suối
- UseTransaction
Out-File bao gồm các thông số bổ sung sau:
Để biết thêm thông tin về những thông số đó là gì, vui lòng tham khảo trợ giúp; vd get-help out-file -parameter append.
Set-Contentmã hóa mặc định: được dịch sang(Get-Culture).Textinfo.ANSICodePage(Windows 8.1, Powershell 4.0, CurrentCulturecs-CZ, CurrentUICultureen-GB, ANSICodePage1250, OEMCodePage852, được thử nghiệm bằng cách sử dụng'řž'chuỗi với các mã khác nhau trong các trang mã trên).