2010-07-21 51 views
9

使用tee-object时,有什么方法可以阻止PowerShell消除控制台消息的颜色?PowerShell在使用tee-object时删除控制台消息的颜色

当我不开球的对象来看,我得到了很好的错误和详细的PowerShell消息的颜色是这样的:

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

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

然而,当我使用T形物体(B/C我想登录到控制台&文件),该消息的颜色没有在控制台上显示(我知道该文件将不会显示它)是这样的:

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

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

如果powershell只是使用tee-object将输出分割为除控制台以外的文件,为什么我会丢失控制台格式?

回答

5

试试这个:

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

这是因为这部分首先执行:

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

这样什么发球对象看到的是一个本地EXE的输出。并且AFAICT,PowerShell不会输出错误记录(或突出显示)来自本机EXE的stderr输出(除非您重定向错误流,例如2>err.log

+0

我明白您的意思;但是,我无法获得该命令方法工作 第一个错误是“您必须在'/'运算符的右侧提供一个值表达式”我试图逃避它没有运气 然后我试着让“$ path \ test_main .ps1 | tee-object $ log“a $命令var,所以我打电话给 powershell.exe -noprofile -command {$ command} 但是当我调用一个不存在的脚本时,它甚至不会调用脚本或抛出错误。 正如你所看到的基思,我在工作g关闭你的博客文章“Effective PowerShell Item 14:捕获脚本中的所有输出”以捕获并记录所有输出:) – DetectiveEric 2010-07-22 14:47:45

+0

如果从PowerShell.exe运行该命令,它应该可以工作(至少它对我来说是我的测试脚本)。如果你在PowerShell之外的其他地方运行,使用'... -command“&{$ path \ test_main.ps1 | tee-object $ log}”'。 – 2010-07-22 15:03:32

+0

RE“捕获脚本中的所有输出” - 当PowerShell 2.0发行时没有解决脚本日志记录问题,我感到非常失望。 :-( – 2010-07-22 15:05:33