Ich benutze diesen Befehl, um die Ausgabe sowohl in der Konsole als auch in einer Datei zu sehen:
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
Es funktioniert nicht so gut wie ich erwartet hatte und ich habe einige Fragen:
- Wie leite ich stderr auch in eine Datei um?
Die Ausgabe funktioniert sehr seltsam. Bei einigen Befehlen gibt es eine große Verzögerung zwischen dem Drucken von Text und dem Aktualisieren der Konsole / Datei. Bei einigen anderen Befehlen scheint die Ausgabe beim Drucken von Text aktualisiert zu sein (ich führe Befehle ohne Abschlag aus und weiß, was gedruckt werden soll). Diese Verzögerung macht dieses T-Shirt fast unbrauchbar - was ist, wenn ein kritischer Fehler gedruckt wird, sodass ich den Befehl stoppen muss, aber nichts sehe, bis es zu spät ist?
Bei einigen Befehlen wird die Ausgabe erst gedruckt, nachdem der vollständige Befehl ausgeführt wurde.
- Selbst wenn der Befehl nach Benutzereingaben fragt, ist die Konsolen- / Dateiausgabe leer! Für diesen Befehl weiß ich, was er erwartet und drucke blind benötigten Text und es hat funktioniert, aber für andere - ohne Ausgabe werde ich warten, bis etwas unendlich passiert, während der Befehl auf meine Eingabe wartet!
Gibt es Lösungen für diese Probleme? Wenn nicht, ist dieses Tee-Ding in PowerShell völlig nutzlos.
quelle
Antworten:
My-Command 2>&1 | Tee-Object 'myfile.log'
. SieheGet-Help about_Redirection
.Get-Help about_Try_Catch_Finally
. Ist der Befehl, den Sie ausführen, ein externes Programm oder ein Skript?Tee
könnte Teilzeichenfolgen gut verarbeiten, aber andere Cmdlets mögenForEach-Object
oderSelect-Object
würden es sicherlich nicht. Beachten Sie, dassGet-Content
es einen speziellen Schalter gibt,-ReadCount
der dieses Verhalten etwas außer Kraft setzt und einenSelect-Object -Skip/-First/-Last/-Unique
Befehl weiter unten in der Pipe ernsthaft durcheinander bringt .Es kann durchaus sein, dass externe Programme, die Sie ausführen, nicht den von PowerShell erwarteten Konventionen entsprechen.
Tee
wird zum Beispiel richtig aufgerufenTee-Object
, was Ihnen sagen sollte, mit welchen Dingen es gut ist, zu arbeiten. In diesem Fall sind Sie möglicherweise weitertee.exe
von GNU Win32 Utils oder MSYS entfernt, die für die sofortige Weiterleitung von Inhalten ausgelegt sind.quelle