【问题标题】:Remove Color From Tee-Object Powershell从 Tee-Object Powershell 中删除颜色
【发布时间】:2018-10-05 10:32:12
【问题描述】:
Start-Process "powershell" -ArgumentList "-noexit -executionpolicy bypass -windowstyle minimized -command `"&{Invoke-Expression `'.\$exe $Arguments`' | Tee-Object `'$Logs`'}`""

此命令有效,但是我正在运行的 .exe 有彩色文本,例如:

[0m

这使得解析生成的 .log 文件变得困难。

有没有办法将 Tee-Object 转换为文件,并删除颜色输出?

另外,有没有办法做到这一点,同时保持控制台上的颜色,因为控制台显示相同的字符(无颜色)。

我一直在搜索,重写了一百种不同的方法,但我似乎找不到删除它的方法。

另外,如果除了invoke-expression | Tee-Object之外还有更简洁的方式来编写启动

这似乎是唯一适合我的。

【问题讨论】:

  • 我认为你不能在进程运行时运行它。我想它是为了完成后。我会试试看,看看我得到了什么。但是他说输出颜色在屏幕上正确显示 - 这不适合我。 ANSII 颜色代码被放到屏幕上,而不是改变颜色。
  • Tee-ObjectNoColor cmdlet 说它是一个空字符串,尽管我在调用表达式之后使用管道。
  • 或者,如果有一种方法我可以使用Get-Content 将日志显示到屏幕上,并且颜色语法会转换为实际颜色 - 我可能会处理解析 .log 文件,但是将.exe直接输出到文件...然后让powershell寡妇简单地显示日志文件代替.exe。但是我也没有想出一种方法来显示来自Get-Content 的颜色。
  • 我发现了Tee-ObjectNoColor 的工作原理——它只需要一点时间就可以启动。我也添加了它以删除转义字符。我现在唯一需要解决的就是如何在 exe 显示中保持颜色输出。

标签: powershell


【解决方案1】:
function Tee-ObjectNoColor {
    [CmdletBinding()]
    Param(
        [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
        [string]$InputObject,

        [Parameter(Position=1, Mandatory=$true)]
        [string]$FilePath
    )

  process{
        $InputObject = $InputObject -replace '\\[\d+(;\d+)?m'
        $InputObject | Out-File $FilePath -Append
        $InputObject | Out-Host
         }
}

我就是这样做的。它会删除所有颜色符号,在屏幕和日志上都保持干净。

【讨论】:

  • 因为这在本质上是Ansgar Wiechers answer 到我上面的链接,所以 HE 应该被投票赞成(直到现在唯一的一个是我的)。
  • 他的回答是错误的。那没起效。他的回答,依旧让屏幕出现彩色字符乱码。但我会支持你为我指明正确的方向。并支持他的链接。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多