当使用get-content回显屏幕时,如何启用powershell来解释ansi颜色代码?

我有一个日志文件,其中包含各种文本的ansi颜色代码。 我使用powershell语言命令将其回显到控制台:

get-content logfile.log -wait 

所以我可以看到最新的日志更改。 但是,所有的ansi颜色代码都显示为文本字符,如:

  Esc[90mEsc[39m 

你如何让他们在PowerShell窗口中的颜色代码解释?

不熟悉PowerShell语言,是否有PowerShell命令或编码选项来处理? 我已经阅读了各种powershell文档,但没有发现任何东西在他们的这些ansi代码。

您可以通过在ESC中分割文本并将颜色转换为Write-Host .... -Forground <color>指令来转换颜色的ANSI转义码。

 function Open-Colored([String] $Filename) { Write-Colored(cat -Raw $Filename) } function Write-Colored([String] $text) { # split text at ESC-char $split = $text.Split([char] 27) foreach ($line in $split) { if ($line[0] -ne '[') { Write-Host $line -NoNewline } else { if (($line[1] -eq '0') -and ($line[2] -eq 'm')) { Write-Host $line.Substring(3) -NoNewline } elseif (($line[1] -eq '3') -and ($line[3] -eq 'm')) { # normal color codes if ($line[2] -eq '0') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor Black } elseif ($line[2] -eq '1') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkRed } elseif ($line[2] -eq '2') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkGreen } elseif ($line[2] -eq '3') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkYellow } elseif ($line[2] -eq '4') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkBlue } elseif ($line[2] -eq '5') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkMagenta } elseif ($line[2] -eq '6') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor DarkCyan } elseif ($line[2] -eq '7') { Write-Host $line.Substring(4) -NoNewline -ForegroundColor Gray } } elseif (($line[1] -eq '3') -and ($line[3] -eq ';') -and ($line[5] -eq 'm')) { # bright color codes if ($line[2] -eq '0') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor DarkGray } elseif ($line[2] -eq '1') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Red } elseif ($line[2] -eq '2') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Gree } elseif ($line[2] -eq '3') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Yellow } elseif ($line[2] -eq '4') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Blue } elseif ($line[2] -eq '5') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Magenta } elseif ($line[2] -eq '6') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor Cyan } elseif ($line[2] -eq '7') { Write-Host $line.Substring(6) -NoNewline -ForegroundColor White } } } } } 

用法:

 Open-Colored .\myColoredLogfile.log