如何在PowerShell中保留CMD脚本的彩色输出(标准输出和错误输出)?

11

我们有用于cmd的构建脚本。例如,这是其中一个脚本的输出结果。

来自cmd的构建脚本的彩色输出

当我在PowerShell中运行相同的命令时,它会将所有内容都以红色输出(可能是因为它是用于错误输出的)。

PowerShell的红色输出

我能保留颜色吗?

2个回答

4

起初,我觉得这是不可能实现的。

但是,在进行了一些搜索之后,我找到了这篇博客文章:用 HTML 和 RTF 录制彩色控制台屏幕

你应该能够使用那里的 PowerShell 脚本来创建你需要的内容。


尝试了几个小例子后,我无法重现您所看到的行为。如果您能提供一个简单的复现,我会进一步为您调查。 - Jason Shirk
1
使用一个简单的C#控制台应用程序,在标准输出(stdout)和标准错误(stderr)中输出彩色文本。直接从PowerShell和从在PowerShell中调用的批处理文件中调用此exe。两种方式下颜色显示效果与从cmd调用相同。 - Jason Shirk
1
@JasonShirk,我不明白你在说什么。xvorsk想要捕获输出的颜色,而不仅仅是输出的文本。 - aphoria
1
@aphoria 当从PowerShell运行时,输出变成了红色。我无法复现这个问题。 - Jason Shirk
1
其实,我认为是我误解了问题。我以为他想捕获输出文本的颜色。实际上,他问的是为什么在从PowerShell调用时颜色不显示。 - aphoria
显示剩余2条评论

2

我不确定这种方法是否有效,但是如果您愿意将stderr重定向到stdout,PowerShell就不会尝试将所有内容都变成红色。要实现这一点,只需在运行cmd脚本时添加2>&1即可,例如:

build.cmd 2>&1

谢谢,我已经尝试过了 - 对我没有用。看起来我们有很多下标/exe/powershell子调用,而2>&1对于嵌套调用无效。 - xvorsx
2
只需用引号将其括起来,即可将重定向传递给cmd.exe: "2>&1" - wOxxOm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接