如何将字符串的颜色保存到变量中

How to save color of string into variables

我使用的是 PowerShell 5.1,我想将一些彩色文本存储到一个变量中。我知道您可以使用 Write-Host 将一些彩色字符串打印到控制台中,如下所示:

但是,我似乎无法将它们保存到变量中:

我尝试了各种解决方案,例如给定的解决方案 here,但似乎没有任何效果。

您可以将 Write-Host 所需的参数参数存储在变量中:

$hi = @{ Object = 'hi!'; ForegroundColor = 'Red' }

# ... later
Write-Host @hi

尝试将文本输出分配给变量 $hi = Write-Host ... 的原因是因为 Write-Host 没有 return它打印的文本 - 它将带有 ANSI 颜色代码的文本发送到控制台。

您可以想出一个方便的方案,在要打印的文本中包含颜色信息,并编写代码,在将文本打印到屏幕时使用该颜色信息,正如其他发布的答案所建议的那样。

例如,

$text = @'
  { 
    "text": [["The quick ", "red"], ["brown fox ", "blue"], 
             ["jumped over ", "yellow"], ["the lazy ", "cyan"], 
             ["dog", "white"]]
  }
'@
($text | ConvertFrom-Json).text |
         % { Write-Host $_[0] -ForegroundColor $_[1] -NoNewLine }

虽然这可能非常乏味。也许检查 PSGallery 看看是否有任何处理彩色文本的包为您的应用程序提供方便的命令。

使用格式为以下的 PowerShell ANSI 转义序列:

$([char]0x1b)[#m

其中 # 代表一个数字。 (有关 ANSI 转义序列的更多信息,请参阅 here

在上述问题的情况下,它看起来像这样: