Set İçeriği: Dosyaya Yazmanın PowerShell Yolu
Set-Content, onsuz yapamayacağım temel PowerShell cmdlet'lerinden biridir. Bir dosyaya yazmak için PowerShell'i kullanmadan önce VBscript'i kullandığımı hala hatırlıyorum. Her zaman ne tür bir nesne kullanmam gerektiğini ve yöntem adını hatırlamaya çalıştığımı hatırlıyorum. FileSystemObject miydi, FileObject miydi yoksa başkası mıydı? Çok acı vericiydi! Yöntem adının CreateTextFile() olduğunu hatırlasam bile, ikinci argüman olarak her zaman True'u eklemeyi unuturdum.
İşte bahsettiğim canavarlığın bir örneği.
Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="c:\file.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write "test string"
objFile.CloseBu VBScript'i bu PowerShell ile karşılaştırın:
Set-Content -Path 'C:\file.txt' -Value 'test string'
Hangisini tercih ediyorsun? PowerShell yolunu seçeceğim! PowerShell yöntemi, Set içeriği adı verilen tek bir cmdlet'i kullanır. Bu cmdlet, bir dosyaya yazmak için PowerShell'i çok daha kolay kullanmamıza olanak tanır. Bu PowerShell cmdlet'i tek bir amacı olan yerleşik bir cmdlet'tir; bir dosyaya yazmak için.
Bu davranışı biraz değiştirmek için orada burada bazı parametreler olabilir, ancak yalnızca bir dosyaya yazmaya odaklanmıştır. Benzer oldukları için İçerik Ekleme ile karıştırılmamalıdır. Set-Content tüm dosyanın üzerine yazarken Add-Content bir dosyaya ekler. İlk başladığımda bunu defalarca zor yoldan öğrendim!
Dosya Oluşturma/Dosyanın Üzerine Yazma
Set-Content cmdlet'i oldukça basittir. Aşağıda iyi bir örnek var. Bu örnek, Set-Content'in hem mevcut olmayan bir dosya oluşturabileceğini hem de önceden var olan bir dosyanın içindeki tüm içeriğin yerini alabileceğini gösterir.
PS> Test-Path -Path C:\test.txt
False
PS> Set-Content -Path C:\test.txt -Value 'foo'
PS> Get-Content -Path C:\test.txt
foo
PS> Set-Content -Path C:\test.txt -Value 'bar'
PS> Get-Content -Path C:\test.txt
barDosyaya Çıktı
Bir dosyaya çıktı verebilen cmdlet'lerden biri Out-File'dır, ancak Set-Content biraz farklı da olsa aynı görevi gerçekleştirebilir.
Belki belirli metin parçalarını bir metin dosyasından alıp satırları başka bir dosyaya çıkarmak isteyebilirsiniz. Get-Content ve Set-content'i kullanarak bunu gerçekleştirebilirsiniz. Belki bir sunucuya ve her satırda durumlarına sahip bir metin dosyam vardır. Her sunucunun durumunu okumak ve bunu bir dosyaya çıkarmak istiyorum. Dosyayı okumak için Get-Content'i ve dosyaya yazmak için Set-Content'i kullanmak mümkündür.
PS> Get-Content -Path C:\test.txt
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: Up
PS> Get-Content -Path C:\test.txt | ForEach-Object {
>>> $srvName = $_.Split(' ')[0]
>>> Set-Content -Path "C:\$srvName.txt" -Value $_
}
PS> Get-ChildItem -Filter 'SRV*'
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 10/29/2017 12:38 PM 17 SRV1.txt
-a---- 10/29/2017 12:38 PM 19 SRv2.txt
-a---- 10/29/2017 12:38 PM 17 SRV3.txt
PS> Get-ChildItem -Filter 'SRV*' | Get-Content
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: UpSet-Content sürekli kullanılan temel cmdlet'lerden biridir. Süslü değil ama her zaman işe yarıyor ve PowerShell'in püf noktaları çantanızda bulunması gereken bir şey.
Tam bir döküm için Set-Content Microsoft belgelerine bakın.