2026-11-12

Set-Content, Out-File ve diğerleri

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 Notepad

Powershell'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.txt

Linux'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.txt

Export-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.csv

gibi 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: