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

2023-12-06

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

get-content logfile.log -wait

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

 Esc[90mEsc[39m

如何在 powershell 窗口中将它们解释为颜色代码?

还不太熟悉 powershell 语言,是否有 powershell 命令或编码选项来处理这个问题?我已经阅读了各种 powershell 文档,但没有在其中找到任何有关这些 ansi 代码的内容。


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

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       }
              }
          }
      }
  }

Usage:

Open-Colored .\myColoredLogfile.log
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当使用 get-content 回显到屏幕时,如何使 powershell 能够解释 ansi 颜色代码? 的相关文章

随机推荐

  • 警告 - 无法获取ImportedKeys 游标之前已被释放并且不可用

    我在一个相当大的 Informix 12 10 模式上运行 SchemaSpy v6 1 0 SNAPSHOT 并且收到错误 警告 无法 getImportedKeys 游标之前已被释放且不可用 我对 Java 一无所知 但我注意到 Liq
  • 用于将 json 模式转换为示例 JSON 的 C# 库

    我正在寻找一个 C 库 它将根据给定的 JSON 架构生成有效的 JSON 对象 我想生成一个非常简单的 JSON 示例 就像如何Swagger可以 我见过一些 JavaScript 库 比如JSON 模式伪造者 但我需要一个 C Net
  • 使用 Google-Maps-for-Rails 添加标记

    我正在玩https github com apneadiving Google Maps for Rails和 我想清除地图上的所有标记 并在用户在地图上单击的位置添加一个新标记 我在页面中添加了以下代码 通过这种方式 我可以看到带有纬度和
  • scikit-learn 如何处理多个 n_jobs 参数?

    我在 scikit learn 中创建了一个管道 如下所示 estimators2 tfidf TfidfVectorizer tokenizer lambda string string split clf SGDClassifier n
  • Amqmdnet - 打开/关闭每条消息的队列是否高效?

    我们有一些代码将消息发送到队列 它使用 amqmdnet dll 版本 8 0 0 6 队列管理器 Queuemanager 在应用程序启动时实例化一次并在整个应用程序中使用 发送消息时 会创建一个队列对象 然后将其关闭 我们应该为每条消息
  • 猫鼬嵌套文档

    我在猫鼬中设置了 2 个模式 var Job new mongoose Schema title String budget Number var JobModel mongoose model Job Job var Customer n
  • Xcode 8.2.1+ 构建失败:位码签名无效

    因此 将 Xcode 从 8 2 1 更新到任何新版本后 我无法构建 运行我的项目 这是我收到的错误 Ld Smash Anarchy build Deployment iphoneos Smash Anarchy build Object
  • Angular 6 PWA 与 Node 不工作

    I have a Angular 6 app that works and registers the SW when served with http server port 8080 command as you can see her
  • fopen() 是否受文件系统限制?

    我编写了一个程序来生成大型 SQL 文件 以便快速填充非常大的数据库 我用 PHP 编写了脚本 当我开始编码时我正在使用fopen and fwrite 当文件变得太大时 程序会将控制权返回给 shell 并且文件将不完整 不幸的是 我不确
  • 阻止程序执行,直到用户单击按钮

    我正在尝试制作一个类似于的模式对话框Swing s JOptionPane 我想呈现一个确认对话框 让用户在我在代码中执行某些操作之前明确地说 是 我无耻地从以下地方偷了这个例子 https gist github com jewelsea
  • MVC 现在是编写 PHP 的唯一方法吗? [关闭]

    Closed 这个问题是无关 目前不接受答案 现在 大量可用于 PHP 的框架都使用 MVC 甚至 ASP net 也有自己的 MVC 模块 我可以看到 MVC 的吸引力 我真的可以并且经常使用它 我看到的唯一缺点是您必须启动整个系统才能执
  • 求和日期范围而不计算mysql中的重叠

    我有一个简单的桌子start date and end date其中的列 这些日期值可能会重叠 id start date end date 1 2011 01 01 2012 04 01 2 2012 05 01 2013 10 01 3
  • 使用 stdin 和 stdout 使用 Java 与外部 C 程序进行通信

    我想做的是在 Java 应用程序中启动 C 程序可执行文件 并允许它们使用 stdin 和 stdout 相互通信 C 程序将等待来自 java 应用程序的命令并回显它 我已经用 gnugo mode gtp 测试了java代码 gnugo
  • java字符串文字可以被垃圾收集吗?如果是,如何证明?

    可以java吗字符串文字 like abc 被垃圾收集 如果是 我们怎样才能以编程方式证明他们是GCed 是的 在 Java7 之后 如果加载字符串文字的类加载器被垃圾收集 并且没有对字符串文字的引用 则字符串文字可以被垃圾收集 注意 在
  • 对于不应该提交的已更改文件,是否有正确的 git 程序?

    我刚刚继承了一个现有的代码库 其中包含多个配置文件 这些配置文件都是通用的 需要针对下载到的每台计算机进行编辑和自定义 Git 显然 告诉我它们已被编辑 并且每次我执行操作时总是将它们显示在 未暂存提交的更改 下git status git
  • ADL 何时应用?

    有3个例子 I typedef int foo namespace B struct S operator int return 24 int foo B S s return 0 int main int t foo B S 24 ADL
  • ZF2 apigility - 我们如何验证 json 数据中的集合

    如何使用 Apigility 获取经过验证的 json 值 例如 我需要验证user id under users集合在以下json数据中 log type split food meal type Break Fast meal date
  • 我可以在oracle中从月到日更改范围间隔分区吗

    我有一个表 其分区如下并具有数百万行数据 表大小为 120 GB PARTITION BY RANGE Read time INTERVAL NUMTOYMINTERVAL 1 MONTH 现在我想用现有数据和未来数据更改为这种分区策略 表
  • 使用 JMS 发送消息在退出时挂起

    我正在尝试创建一个 Java 应用程序客户端项目 该项目将 JMS 消息发送到 Glassfish 服务器上的队列 问题是应用程序发送消息后 它在应该退出时挂起 消息传输成功 但由于某种原因应用程序没有退出 我尝试过调试该应用程序 并且可以
  • 当使用 get-content 回显到屏幕时,如何使 powershell 能够解释 ansi 颜色代码?

    我有一个日志文件 其中包含各种文本周围的 ansi 颜色代码 我使用 powershell 语言命令将其回显到控制台 get content logfile log wait 这样我就可以看到最新的日志更改 但是 所有 ansi 颜色代码都