在 PowerShell 7.2 中更改详细颜色
Changing Verbose colors in PowerShell 7.2
我希望以下代码能够使用我的默认前景色打印详细文本:
$Host.PrivateData.VerboseForegroundColor = [console]::ForegroundColor
Write-Verbose 'Test' -Verbose
但是,它照常打印黄色文本。更改错误前景色 确实有效:
$Host.PrivateData.ErrorForegroundColor = [console]::ForegroundColor
Write-Error 'test'
我发现避免这种情况的唯一方法是这样做:
Write-Verbose 'Test' -Verbose *>&1 | Write-Host
但这并没有真正改变冗长的颜色,只是强制它使用 Write-Host 作为默认文本直接打印到控制台主机。我知道 Write-Host 确实可以让您将消息颜色更改为您想要的任何颜色,但这并不是一个理想的解决方案。
在Powershell 7.2+
中,$Host.PrivateData
不是设置样式的正确方法。它是为了向后兼容。有关详细信息,请参阅全新的 about_*
页面:about_ANSI_Terminals
你想要
$PSStyle.Formatting.Verbose = $PSStyle.Foreground.FromRgb(0x34f2aa)
查看文档,它添加了一堆选项:粗体、闪烁、隐藏、反向、斜体、下划线、文件信息.... about_ANSI_Terminals
测试一下
function testVerbose {
[CmdletBinding()]
param( [Parameter() ]$x )
"$x"
$X.GetType().FullName | write-verbose
}
testVerbose 34.5 -Verbose ;
$PSStyle.Formatting.Verbose = $PSStyle.Foreground.FromRgb(0x34f2aa)
testVerbose 34.5 -Verbose
正在查看 ansi 转义
查看 ANSI
控制字符的一种方法是替换“``e”。
# I saved the value before changing it
$originalVerbose -replace "`e", ''
$PSStyle.Formatting.Verbose -replace "`e", ''
注意:切换到24bit-color ANSI escape sequence
打印所有控制字符
Format-ControlChar 将所有控制字符转换为它们的 Symbol
版本,而不仅仅是 e
,使值可以通过管道传输。
很简单,只需将 0x2400 添加到代码点即可。 compart.com/block/U+2400
> "$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
| Format-ControlChar
␛[106mPower␛[4m␛[1mShell␛[0m
我希望以下代码能够使用我的默认前景色打印详细文本:
$Host.PrivateData.VerboseForegroundColor = [console]::ForegroundColor
Write-Verbose 'Test' -Verbose
但是,它照常打印黄色文本。更改错误前景色 确实有效:
$Host.PrivateData.ErrorForegroundColor = [console]::ForegroundColor
Write-Error 'test'
我发现避免这种情况的唯一方法是这样做:
Write-Verbose 'Test' -Verbose *>&1 | Write-Host
但这并没有真正改变冗长的颜色,只是强制它使用 Write-Host 作为默认文本直接打印到控制台主机。我知道 Write-Host 确实可以让您将消息颜色更改为您想要的任何颜色,但这并不是一个理想的解决方案。
在Powershell 7.2+
中,$Host.PrivateData
不是设置样式的正确方法。它是为了向后兼容。有关详细信息,请参阅全新的 about_*
页面:about_ANSI_Terminals
你想要
$PSStyle.Formatting.Verbose = $PSStyle.Foreground.FromRgb(0x34f2aa)
查看文档,它添加了一堆选项:粗体、闪烁、隐藏、反向、斜体、下划线、文件信息.... about_ANSI_Terminals
测试一下
function testVerbose {
[CmdletBinding()]
param( [Parameter() ]$x )
"$x"
$X.GetType().FullName | write-verbose
}
testVerbose 34.5 -Verbose ;
$PSStyle.Formatting.Verbose = $PSStyle.Foreground.FromRgb(0x34f2aa)
testVerbose 34.5 -Verbose
正在查看 ansi 转义
查看 ANSI
控制字符的一种方法是替换“``e”。
# I saved the value before changing it
$originalVerbose -replace "`e", ''
$PSStyle.Formatting.Verbose -replace "`e", ''
注意:切换到24bit-color ANSI escape sequence
打印所有控制字符
Format-ControlChar 将所有控制字符转换为它们的 Symbol
版本,而不仅仅是 e
,使值可以通过管道传输。
很简单,只需将 0x2400 添加到代码点即可。 compart.com/block/U+2400
> "$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
| Format-ControlChar
␛[106mPower␛[4m␛[1mShell␛[0m