在PowerShell中,有没有一种方法可以在将程序输出分配给变量时保留用于向控制台传递颜色信息的ANSI控制代码?
例如,我使用Test Kitchen来提供每个测试套件独特的彩色输出。当我运行"kitchen create INSTANCE"时,我会得到几种颜色的输出。但是,如果我将输出分配给一个变量,或者将其管道传输到另一个cmdlet(如Tee-Object),那么这些颜色信息将会丢失。似乎PowerShell会在结果被发送到管道或分配给变量时剥离这些信息。
例如,我使用Test Kitchen来提供每个测试套件独特的彩色输出。当我运行"kitchen create INSTANCE"时,我会得到几种颜色的输出。但是,如果我将输出分配给一个变量,或者将其管道传输到另一个cmdlet(如Tee-Object),那么这些颜色信息将会丢失。似乎PowerShell会在结果被发送到管道或分配给变量时剥离这些信息。
kitchen create INSTANCE # Colored output
$output = kitchen create INSTANCE
Write-Host $output # Color information is lost
有趣的是,我可以在自己的字符串中实现控制代码,当启用虚拟终端时,PowerShell能够遵守这些代码。与命令输出不同,这些代码可以在变量分配后保留:
$output = "`u{001b}[31mHello"
Write-Host $output # Results in colored output
看起来只有在程序的输出中,当值被分配或通过管道发送时,颜色信息才会被剥离。是否有办法保留来自外部命令的这些控制代码?
[pscustomobject]@{type="error";output=$results}
这样您就可以使用 foreach 循环和 switch/if 语句来处理对象... 如果您只想要输出,您可以执行write-host $results.output
您甚至可以有一个参数开关,比如kitchen create instance -colorTag
,它可以启用标记功能,但我不确定您的 kitchen 函数/命令是用哪种语言编写的。您可以将 type="error" 改为 color="red"。 - Robert Cotterman