Hep böyle (hatta cmd.exe) gibi bir dosyaya çıktı üretmesi bir exe yönlendirebilirsiniz olarak Powershell komut dosyasını çalıştırmak için komut satırından bir toplu komut dosyası kullanıyorum:
powershell c:\test.ps1 > c:\test.log
PowerShell içinde, ayrıca dosyaya tek tek komutlar yönlendirebilir ancak bu durumlarda muhtemelen günlük dosyasına eklenecek ziyade üzerine yazmak istiyor mesela:
$logFile = 'c:\temp\test.log'
"Executing script $($MyInvocation.MyCommand.Path)" > $logFile
foreach ($proc in Get-Process) {
$proc.Name >> $logFile
}
"Another log message here" >> $logFile
Gördüğünüz gibi, betiğin içinde yeniden yönlendirme yapmak biraz ağrıyor çünkü dosyaya çok sayıda yönlendirme yapmanız gerekiyor. OTOH, sadece çıktıların bir kısmını dosyaya yönlendirmek istiyorsanız, bu şekilde daha fazla kontrole sahip olursunuz. Başka bir seçenek, komut yürütme sonuçlarının gözlemlenmesi için bir kullanıcıya verilen konsola çıkış bilgisi için Write-Host
kullanmaktır. Write-Host
çıktısının dosyaya yönlendirilemediğini unutmayın.
Bu
bir cmd.exe
dan yürütülen örnek
C:\Temp>type test.ps1
$OFS = ', '
"Output from $($MyInvocation.MyCommand.Path). Args are: $args"
C:\Temp>powershell.exe -file test.ps1 1 2 a b > test.log
C:\Temp>type test.log
Setting environment for using Microsoft Visual Studio 2008 Beta2 x64 tools.
Output from C:\Temp\test.ps1. Args are: 1, 2, a, b
olabilir kullanma hakkında yapmak: powershell c: \ test.ps1 c: \ log.log> c: \ test.log Burada log.log bağımsız değişken midir? – ssn
Evet, ancak '-File' parametresini kullanmayı deneyin. 'powershell -file c: \ test.ps1 c: \ log.log> c: \ test.log' –
Dosya dosyasında (veya dosya olmadan) dosya parametresini kullanmayı denediğimde, aşağıdaki satırın komutta çalıştırılmasını sağlarım satır: powershell -dosyası c: \ test.ps1 c: \ log.log 1> c: \ test.log "1" in nasıl geldiğini anlamıyorum ..... Ve sanırım bütün metin komut dosyası adının giriş dosyası adı olarak alınmasından sonra çıktı beklenen değil. Ve bu davranış "-file" kullanıp kullanmadığımı da aynı. – ssn