2010-07-21 16 views
9

C'è un modo per impedire a PowerShell di rimuovere i colori dei messaggi della console quando si utilizza l'oggetto tee?PowerShell rimozione dei colori dei messaggi della console quando si utilizza l'oggetto tee

Quando eseguo senza tee-oggetto ottengo la bella di errore e colori del messaggio PowerShell verbose come questo:

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

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

Tuttavia, quando sto usando tee-oggetto (b/c io voglio la registrazione per consolare & file), i colori dei messaggi non vengono visualizzati sulla console (so che il file non mostrarlo) come questo:

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

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

Se PowerShell utilizza solo tee-object per dividere l'output in un file oltre alla console, perché sto perdendo la formattazione della console?

risposta

5

Prova a:

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

Ciò accade perché questa parte viene eseguito per primo:

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

Tale che ciò tee-oggetto vede è l'uscita di un EXE nativo. E AFAICT, PowerShell non emette record di errore (o evidenzia) output stderr da un EXE nativo (a meno che non si reindirizzi il flusso di errori ad esempio 2>err.log.

+0

Vedo cosa stai dicendo, tuttavia, non riesco a ottenere quel comando metodo Il primo errore era "È necessario fornire un'espressione di valore sul lato destro dell'operatore '/'." Ho tentato di evitarlo senza fortuna Quindi ho provato a fare il "$ percorso \ test_main .ps1 | tee-object $ log "a $ command var, quindi chiamo powershell.exe -noprofile -command {$ command} ma non si tratta nemmeno di chiamare lo script o di generare un errore quando chiamo uno script inesistente. Come puoi vedere Keith, sto lavorando g del tuo post sul blog "Efficace articolo PowerShell 14: Catturare tutto l'output da uno script" per acquisire e registrare tutto l'output :) – DetectiveEric

+0

Se si esegue il comando da PowerShell.exe, dovrebbe funzionare (almeno lo ha fatto per me sul mio test script). Se lo stai eseguendo da qualche altra parte oltre a PowerShell usa '... -command 'e {$ path \ test_main.ps1 | tee-object $ log}" '. –

+0

RE "cattura tutto l'output da uno script" - Sono rimasto deluso quando PowerShell 2.0 è stato spedito senza affrontare il problema di registrazione dello script. :-( –

Problemi correlati