2012-04-26 12 views
5

Her yineleme işlemi sırasında kabukta çıkışları $ olan bir komut dosyası döngüsümde powershell betiğimde var. Çok fazla çıktı var ve kabuğun görüntüleyebileceği giriş sayısı sınırlıdır. Çıktıyı bir metin dosyasına vermek istiyorum. Komut satırında nasıl yapılacağını biliyorum. Yine de bir powershell'de nasıl mümkün olabilir?Powershell çıktısını metin dosyasına dışa aktarma

Bilginize, ben

powershell c:\test.ps1 c:\log.log 

cevap

12

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 
+1

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

+0

Evet, ancak '-File' parametresini kullanmayı deneyin. 'powershell -file c: \ test.ps1 c: \ log.log> c: \ test.log' –

+0

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

4

ne ben sadece basitçe, 'T' komutunu yüzden Powershell komut dosyasına bir argümanı yaşıyorum eğer

C:\ipconfig | tee C:\log.txt 
+0

Aradığım şey bu. Hem ekrana hem de dosyaya vermek istedim. Teşekkürler! – Hajjat