Używam tego polecenia, aby zobaczyć dane wyjściowe zarówno w konsoli, jak i pliku:
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
Nie działa tak dobrze, jak się spodziewałem i mam kilka pytań:
- Jak przekierować stderr również do pliku?
Wyjście działa bardzo dziwnie. W przypadku niektórych poleceń istnieje duże opóźnienie między drukowaniem tekstu a aktualizacją konsoli / pliku. W przypadku niektórych innych poleceń dane wyjściowe wydają się być aktualizowane po wydrukowaniu tekstu (uruchamiam polecenia bez tee i wiem, co powinien wydrukować). To opóźnienie sprawia, że ta koszulka jest prawie bezużyteczna - co jeśli wydrukowany zostanie jakiś krytyczny błąd, więc muszę przerwać polecenie, ale nic nie zobaczę, dopóki nie będzie za późno?
W przypadku niektórych poleceń dane wyjściowe są drukowane dopiero po wykonaniu pełnego polecenia.
- Co więcej, nawet jeśli polecenie prosi użytkownika o podanie danych, dane wyjściowe konsoli / pliku są puste! W przypadku tego polecenia wiem, czego się spodziewa i ślepo drukuje potrzebny tekst i zadziałało, ale dla innych - bez wyjścia poczekam, aż coś się wydarzy nieskończenie, podczas gdy polecenie będzie czekać na moje wejście!
Czy są rozwiązania tych problemów? Jeśli nie, to tee w PowerShell jest całkowicie bezużyteczne.