2010-07-21 5 views
9

Existe-t-il un moyen d'empêcher PowerShell de supprimer les couleurs de message de la console lors de l'utilisation de tee-object?PowerShell supprime les couleurs de message de la console lors de l'utilisation de l'objet tee

Quand je lance sans tee-objet je reçois la belle erreur et verbeux couleurs de message powershell comme ceci:

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

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

Cependant, lorsque j'utilise t-objet (b/c Je veux vous connecter à la console & fichier), les couleurs de message ne sont pas représentés sur la console (je sais que le fichier ne sera pas le montrer) comme ceci:

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

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

Si powershell n'utilise que tee-object pour diviser la sortie en un fichier en plus de la console, pourquoi est-ce que je perds le formatage de la console?

Répondre

5

Essayez ceci:

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

Cela se produit parce que cette partie est exécutée en premier:

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

tel que ce voit t-objet est la sortie d'un EXE natif. Et AFAICT, PowerShell ne génère pas les enregistrements d'erreur (ou en surbrillance) sortie stderr à partir d'un EXE natif (sauf si vous redirigez le flux d'erreur par exemple 2>err.log

+0

Je vois ce que vous dites, mais je ne peux pas obtenir cette commande Première erreur: "Vous devez fournir une expression de valeur sur le côté droit de l'opérateur '/'." J'ai essayé d'y échapper sans aucune chance Puis j'ai essayé de faire "$ path \ test_main .ps1 | tee-object $ log "une commande $ var, donc j'appelle powershell.exe -noprofile -command {$ command} mais cela n'appelle même pas le script ou déclenche une erreur quand j'appelle un script inexistant. Comme vous pouvez le voir Keith, je suis workin g de votre article de blog "Effective PowerShell Item 14: Capture de toutes les sorties d'un script" pour capturer et enregistrer toutes les sorties :) – DetectiveEric

+0

Si vous exécutez la commande à partir de PowerShell.exe cela devrait fonctionner (au moins, il a fait pour moi sur mon test scénario). Si vous l'utilisez ailleurs que PowerShell, utilisez '... -command" & {$ path \ test_main.ps1 | tee-object $ log} "'. –

+0

RE "capturer toutes les sorties d'un script" - J'ai été déçu lorsque PowerShell 2.0 est sorti sans aborder le problème de journalisation des scripts. :-( –

Questions connexes