Saya menggunakan perintah ini untuk melihat output di konsol dan file:
powershell -command "my_command_1 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
powershell -command "my_command_2 | tee ('logs\{0}.log' -f (Get-Date -format 'yyyy.MM.dd-HH.mm'))"
# etc
Ini bekerja tidak sebaik yang saya harapkan dan saya punya beberapa pertanyaan:
- Bagaimana cara mengarahkan stderr juga ke file?
Outputnya bekerja sangat aneh. Untuk beberapa perintah ada penundaan besar antara teks dicetak dan konsol / file diperbarui. Untuk beberapa perintah lain, output tampak diperbarui ketika teks dicetak (saya menjalankan perintah tanpa tee dan saya tahu apa yang harus dicetak). Penundaan ini membuat tee ini hampir tidak berguna - bagaimana jika beberapa kesalahan kritis akan dicetak sehingga saya perlu menghentikan perintah, tetapi saya tidak akan melihat apa pun sampai semuanya terlambat?
Untuk beberapa perintah, output dicetak hanya setelah perintah lengkap dilakukan.
- Selain itu, bahkan jika perintah meminta input pengguna, output konsol / file kosong! Untuk perintah itu saya tahu apa yang diharapkan dan secara membuta mencetak teks yang diperlukan dan itu berhasil, tetapi untuk yang lain - tanpa output saya akan menunggu sesuatu terjadi tanpa batas sementara perintah akan menunggu input saya!
Apakah ada solusi untuk masalah ini? Jika tidak, tee tee di PowerShell ini sama sekali tidak berguna.
sumber
Jawaban:
My-Command 2>&1 | Tee-Object 'myfile.log'
. LihatGet-Help about_Redirection
.Get-Help about_Try_Catch_Finally
. Apakah perintah Anda menjalankan program eksternal atau skrip?Tee
mungkin menangani string parsial dengan baik, tetapi cmdlet lain sukaForEach-Object
atauSelect-Object
pasti tidak. Catatan yangGet-Content
memiliki saklar khusus-ReadCount
yang agak mengabaikan perilaku ini, dan itu akan benar-benar mengacaukan denganSelect-Object -Skip/-First/-Last/-Unique
perintah lebih jauh ke bawah pipa.Mungkin saja program eksternal yang Anda jalankan tidak akan mematuhi konvensi yang diharapkan PowerShell.
Tee
, misalnya, dipanggil dengan benarTee-Object
, yang akan memberi tahu Anda hal-hal yang baik untuk dikerjakan. Dalam hal ini, Anda mungkin lebih jauh mendapatkantee.exe
dari GNU Win32 Utils atau MSYS yang dirancang untuk segera meneruskan konten.sumber