PowerShell ANSI 转义颜色不适用于格式-Table
PowerShell ANSI Escape color not working with Format-Table
问题
出于某种原因,与 Format-Table 一起使用的 ANSI 转义颜色会丢失列对齐方式。有什么建议可以纠正这种行为吗?导致此问题的行是
"$e[${color}m$($dbValue)${e}[0m"
然而,如果我们不使用 ANSI Escape,该函数可以正常工作。
预期结果(删除颜色)
id author title genre price publish_date
-- ------ ----- ----- ----- ------------
Bk001 LName, FName XML Powershell Guide Computer 104.95 2020-10-01
Bk002 LName2, FName2 Python Guide Computer 104.95 2020-12-16
当前结果(删除颜色)
id author title genre price publish_date
-- ------ ----- ----- ----- ------------
Bk001 LName, FName XML Powershell Guide Computer 104.95 2020-10-01
Bk002 LName2, FName2 Python Guide Computer 104.95 2020-12-16
示例代码
$myBooks = [xml] @"
<catalog>
<book id="Bk001">
<author>LName, FName</author>
<title>XML Powershell Guide</title>
<genre>Computer</genre>
<price>104.95</price>
<publish_date>2020-10-01</publish_date>
</book>
<book id="Bk002">
<author>LName2, FName2</author>
<title>Python Guide</title>
<genre>Computer</genre>
<price>104.95</price>
<publish_date>2020-12-16</publish_date>
</book>
</catalog>
"@
# Colors
# Red 31
# Green 32
$ColorRed = '31'
$ColorGreen = '32'
function ColorValue {
param (
[Parameter(Mandatory = $False)][string]$dbValue,
[Parameter(Mandatory = $False)][string]$color
)
$e = [char]27
if ($color -eq [string]::Empty) {
$color = $ColorGreen
}
if ([string]::IsNullOrWhiteSpace($dbValue)) {
$dbValue = 'NULL'
$color = $ColorRed
}
"$e[${color}m$($dbValue)${e}[0m"
}
# title, genre, price, publish_date
$myBooks.catalog.book | Format-Table -AutoSize -Wrap -Property id, author,
@{name = 'title'; expression = { (ColorValue $_.title)}},
@{name='genre';expression={ColorValue $_.genre $ColorRed}} , price, publish_date
PowerShell 信息
> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.752
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.752
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
更新
即使升级到 PowerShell 5.1.19041.1,问题仍然存在。它实际上发生在 VS Code PowerShell 终端而不是 PowerShell 中......去看看吧。 VS Code 的任何解决方法或将其作为错误提交?
原来问题不在代码中,而是在 VS Code:PowerShell 扩展中。将其归档为错误:https://github.com/PowerShell/vscode-powershell/issues/2815
问题
出于某种原因,与 Format-Table 一起使用的 ANSI 转义颜色会丢失列对齐方式。有什么建议可以纠正这种行为吗?导致此问题的行是
"$e[${color}m$($dbValue)${e}[0m"
然而,如果我们不使用 ANSI Escape,该函数可以正常工作。
预期结果(删除颜色)
id author title genre price publish_date
-- ------ ----- ----- ----- ------------
Bk001 LName, FName XML Powershell Guide Computer 104.95 2020-10-01
Bk002 LName2, FName2 Python Guide Computer 104.95 2020-12-16
当前结果(删除颜色)
id author title genre price publish_date
-- ------ ----- ----- ----- ------------
Bk001 LName, FName XML Powershell Guide Computer 104.95 2020-10-01
Bk002 LName2, FName2 Python Guide Computer 104.95 2020-12-16
示例代码
$myBooks = [xml] @"
<catalog>
<book id="Bk001">
<author>LName, FName</author>
<title>XML Powershell Guide</title>
<genre>Computer</genre>
<price>104.95</price>
<publish_date>2020-10-01</publish_date>
</book>
<book id="Bk002">
<author>LName2, FName2</author>
<title>Python Guide</title>
<genre>Computer</genre>
<price>104.95</price>
<publish_date>2020-12-16</publish_date>
</book>
</catalog>
"@
# Colors
# Red 31
# Green 32
$ColorRed = '31'
$ColorGreen = '32'
function ColorValue {
param (
[Parameter(Mandatory = $False)][string]$dbValue,
[Parameter(Mandatory = $False)][string]$color
)
$e = [char]27
if ($color -eq [string]::Empty) {
$color = $ColorGreen
}
if ([string]::IsNullOrWhiteSpace($dbValue)) {
$dbValue = 'NULL'
$color = $ColorRed
}
"$e[${color}m$($dbValue)${e}[0m"
}
# title, genre, price, publish_date
$myBooks.catalog.book | Format-Table -AutoSize -Wrap -Property id, author,
@{name = 'title'; expression = { (ColorValue $_.title)}},
@{name='genre';expression={ColorValue $_.genre $ColorRed}} , price, publish_date
PowerShell 信息
> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.752
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.752
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
更新
即使升级到 PowerShell 5.1.19041.1,问题仍然存在。它实际上发生在 VS Code PowerShell 终端而不是 PowerShell 中......去看看吧。 VS Code 的任何解决方法或将其作为错误提交?
原来问题不在代码中,而是在 VS Code:PowerShell 扩展中。将其归档为错误:https://github.com/PowerShell/vscode-powershell/issues/2815