2010-07-21 15 views
9

Czy istnieje sposób, aby zatrzymać PowerShell przed usunięciem kolorów wiadomości konsoli podczas korzystania z tee-obiektu?PowerShell usuwanie kolorów wiadomości konsoli podczas korzystania z tee-obiektu

Kiedy uruchomić bez tee-Object uzyskać ładny błąd i rozwlekłe kolory wiadomość PowerShell tak:

powershell.exe -noprofile -file $project_root/test_main.ps1 

with color http://i32.tinypic.com/250779w.jpg

Jednak kiedy używam tee-Object (b/c I chcą zalogowaniu do konsoli & pliku), kolory wiadomość nie są pokazane na konsoli (wiem, że plik nie pokaże go) tak:

powershell.exe -noprofile -file $project_root/test_main.ps1 | tee-object -FilePath $log 

no color http://i29.tinypic.com/bzpc2.jpg

Jeśli funkcja powershell używa tylko tee-obiektu, aby podzielić dane wyjściowe do pliku oprócz konsoli, dlaczego tracę formatowanie konsoli?

Odpowiedz

5

Spróbuj to zamiast:

powershell.exe -noprofile -command { $path\test_main.ps1 | tee-object $log } 

Dzieje się tak dlatego, że ta część jest wykonywana najpierw:

powershell.exe -noprofile -file $project_root/test_main.ps1 

taka, że ​​to, co widzi tee-obiekt jest wyjście z native EXE. AFAICT, PowerShell nie generuje rekordów błędów (lub podświetlania) danych wyjściowych stderr z natywnego EXE (chyba że przekierowujesz strumień błędów, np. 2>err.log.

+0

Widzę, co mówisz, jednak nie mogę uzyskać tego polecenia metoda do pracy: Pierwszy błąd: "Musisz podać wyrażenie wartości po prawej stronie operatora"/"." Próbowałem uciekać bez powodzenia Potem próbowałem zrobić "$ path \ test_main" .ps1 | tee-object $ log "a $ command var, więc nazywam powershell.exe -noprofile -polecenie {$ command} , ale to nawet nie wywołanie skryptu lub zgłoszenie błędu podczas wywoływania nieistniejącego skryptu. Jak widać, Keith, pracuję g off twojego posta na blogu "Effective PowerShell Artykuł 14: Przechwytywanie wszystkich danych wyjściowych ze skryptu" w celu przechwytywania i rejestrowania wszystkich danych wyjściowych :) – DetectiveEric

+0

Po uruchomieniu polecenia z PowerShell.exe powinno działać (przynajmniej zrobiło to dla mnie podczas mojego testu scenariusz). Jeśli używasz go w innym miejscu niż PowerShell, użyj '... -command" & {$ path \ test_main.ps1 | tee-object $ log} "'. –

+0

RE "przechwytywanie wszystkich danych wyjściowych ze skryptu" - byłem rozczarowany, gdy PowerShell 2.0 został dostarczony bez rozwiązania problemu z rejestrowaniem skryptów. :-( –

Powiązane problemy