Andy bana iyi işaretçiler verdi ama ben daha derli toplu bir şekilde bunu yapmak istedim. PowerShell, 2>&1 >>
yöntemiyle başka bir işlem tarafından erişilen günlük dosyası hakkında bana şikâyette bulunmadığından, yani hem stderr hem de stdout erişim için dosyayı kilitlemeye çalışırken, sanırım. İşte işte burada çalıştım.
İlk önce güzel bir dosya adı oluşturmak izin, ama bu sadece bilgiçlik olduğu için gerçekten: Eğer TÜM çıkışını yönlendirebilirsiniz stop-transcript
start-transcript
ile
start-transcript -append -path $logfile
write-output "starting sync"
robocopy /mir /copyall S:\common \\10.0.0.2\common 2>&1 | Write-Output
some_other.exe /exeparams 2>&1 | Write-Output
...
write-output "ending sync"
stop-transcript
ve: hile nerede başladığını
$name = "sync_common"
$currdate = get-date -f yyyy-MM-dd
$logfile = "c:\scripts\$name\log\$name-$currdate.txt"
Ve burada PowerShell, tek bir dosyaya komut verir, ancak it doesn't work correctly with external commands. Öyleyse bunların tüm çıktılarını PS'nin stdout'una yönlendirelim ve transkript gerisini halledelim. Aslında, MS mühendislerinin neden bu kadar basit bir şekilde çalışılabileceğine dair "yüksek maliyet ve teknik karmaşıklıklar nedeniyle" bunu henüz düzeltmediklerini söyledikleri hakkında hiçbir fikrim yok.
Her iki yol da her bir komutu start-process
ile çalıştırmak büyük bir karmaşama IMHO'dur, ancak bu yöntemle yapmanız gereken tek şey, harici komutları çalıştıran her satıra 2>&1 | Write-Output
kodunu eklemektir.
Güzel cevap. Ama bana göre ilk bakışta bir hata var. -Redirectterroroutput yerine -RedirectStandardError olması gerektiğini düşünüyorum. – Grigory
İyi yakalama! Sabit :-) –
Powershell Remoting için çalışıyor mu? Test ettim, sadece ikinci yöntem PS Remoting için çalışıyor. – Kiquenet