Powershell'de dosyaya yazmaya yarayan birkaç farklı cmdlet/operatör var:
- Set-Content
- Add-Content
- Out-File
- > ve >> operatörleri
- Tee-Object
- Export-CSV, her ne kadar düz metin olmasa da
Bunlardak ilk üçü en sık kullandıklarım. Aralarında bazı farklar var.
Set-Content ve Add-Content gibi komutların alias'ları var. sc ve ac işleri kolaylaştırır. Out-File için bir alias yok. Kendi aliasımızı oluşturabiliriz.
New-Alias -Name of -Value Out-File
Bu komutların tümü, dosya yoksa oluşturur.
Set-Content verilen dosyanın içeriğini tamamen değiştirir. Add-Content ekleme yapar. Out-File varsayılan olarak dosyanın içeriğini değiştirir (üzerine yazar) ama -Append parametresi ile kullanıldığında ekleme yapar, verileri silmez.
Set-Content ve Add-Content varsayılan kodlama ANSI kullanır. Out-File ise UTF16LE kullanır. Powershell 7'de ise hepsi UTF-8 kullanır, dosya başına BOM koymaz.
Set-Content ve Add-Content pipeline üzerinden gelen nesneyi dosyaya yazarken dönüşüm kullanmaz. Şunun gibi bir komut ile dosyaya yazılınca
Get-Process notepad | Set-Content D:\notepad-surecleri.txt
içinde sadece Get-Process cmdlet'inin döndüğü System.Diagnostics.Process (Notepad) yazar. Ama
Get-Process notepad | Out-File D:\notepad-surecleri.txt
komutu, ekranda görüldüğü gibi process bilgilerini yazar:
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 1256 43 116408 86932 7,61 3564 1 NotepadPowershell'de de geçerli olan akış yönlendirme operatörleri > ve >> Out-File gibi çalışıyorlar. > dosyanın üzerine yazarken, >> ekleme yapıyor.
Get-Process notepad > :\notepad-surecleri.txtLinux'ta kullanılan tee komutunun eşdeğeri olan Tee-Object'in alias'ı da tee. Bu cmdlet de Out-File gibi davranıyor.
Get-Process notepad | Tee-Object D:\notepad-surecleri.txtExport-Csv de yazarken ANSI encoding kullanır. Türkçe karakterler yazılacaksa -Encoding parametresi ile UTF8 belirtilmeli. Bu komut zaten formatlanmış veri yazdığı için
Get-Process notepad | Export-Csv D:\notepad-surecleri.csvgibi bir komut ile yazılan veri varsayılan olarak virgülle ayrılmış (-Delimiter ile değiştirilebilir) alanlar şeklinde olur. Ama Out-File gibi ekranda gözükenleri de yazmaz, nesnenin bütün alanlarını yazar.
Hiç yorum yok:
Yorum Gönder