PowerShell - 禁用彩色命令输出

7
我正在使用PowerShell(或PowerShell Core),运行一个命令(New-AzResourceGroupDeployment -WhatIf),该命令会产生一些非常丰富多彩的输出,如下图所示:enter image description here 问题在于,当我在Azure DevOps管道中运行此命令时,日志会因为颜色而混淆,并产生大量的无用信息(如下图所示):enter image description here 所以我的问题是: 由于该命令本身并没有这样的选项,那么在PowerShell(Core)中有一种通用的方法可以禁止命令生成彩色输出吗?

在PowerShell中没有简单的方法可以删除ANSI颜色代码。您可以查看此主题 - 在将 PowerShell 输出写入文件之前修复 ANSI 控制字符,因为它可能会对您有所帮助。 - Krzysztof Madej
1
即使不是标记答案,请使用@Krzysztof提到的链接中的第二个答案。该模式正确匹配ANSI转义代码(包括转义字符本身)。直接链接:https://dev59.com/TQn5s4cB2Jgan1znP9v6#58297270 - swbbl
说实话,我觉得它过于复杂了,所以现在放弃了。 - silent
这个问题已经在DevOps方面记录下来了,不幸的是目前没有完美的解决方案。您可以在以下链接中跟踪此问题: https://github.com/microsoft/azure-pipelines-agent/issues/1569. - Cece Dong - MSFT
谢谢 @CeceDong-MSFT,我已经订阅了那个线程。 - silent
显示剩余3条评论
1个回答

14

使用 PowerShell 7.2,你可能会有一个新的解决方案:

$PSStyle.OutputRendering = [System.Management.Automation.OutputRendering]::PlainText;

about_ANSI_Terminals文档中可知:

以下成员控制何时或如何使用ANSI格式:

  • $PSStyle.OutputRendering是一个System.Management.Automation.OutputRendering枚举,其包含以下值:
    • ANSI:始终按原样传递ANSI
    • PlainText:始终剥离ANSI转义序列,只保留纯文本
    • Host:这是默认行为。在重定向或管道输出中删除ANSI转义序列。

您也可以尝试查询PowerShell帮助系统相关信息:

Get-Help -Name 'about_ANSI_Terminals';

一个完整的使用示例,无论您是否拥有模块等,例如:

$PSStyle.OutputRendering = [System.Management.Automation.OutputRendering]::Ansi;
$PSVersionTable | Format-List;

将会产生一个有色输出,而这个:

$PSStyle.OutputRendering = [System.Management.Automation.OutputRendering]::PlainText;
$PSVersionTable | Format-List;

将会生成纯文本。 如果你尝试这个:

$PSStyle.OutputRendering = [System.Management.Automation.OutputRendering]::Host;
$PSVersionTable | Format-Table | Tee-Object -FilePath '.\output.txt';

你应该能在终端/控制台中看到有颜色的输出,但在 output.txt 文件中只能看到纯文本。

另外我刚才发现这个问题已经在这里得到了回答,并且有更详细的描述。


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