我该如何在PowerShell终端中为标准输出stdout和标准错误stderr添加颜色?
也就是说,在典型的PowerShell终端中运行任何命令行程序。该程序将写入stdout和stderr。该程序不应被修改或意识到颜色设置。
我想让stdout变成白色,stderr变成红色。
我该如何在PowerShell终端中为标准输出stdout和标准错误stderr添加颜色?
也就是说,在典型的PowerShell终端中运行任何命令行程序。该程序将写入stdout和stderr。该程序不应被修改或意识到颜色设置。
我想让stdout变成白色,stderr变成红色。
您可以利用标准输出通常在大多数情况下正常流式传输的事实,以及重定向不会忘记初始句柄。因此,一个示例解决方案是:
在我的测试中,这个方法效果很好:
function Color {
param (
[Parameter(Mandatory)]
[scriptblock]$Command,
[System.ConsoleColor]$OutColor = [System.ConsoleColor]::White,
[System.ConsoleColor]$ErrColor = [System.ConsoleColor]::Red,
[System.ConsoleColor]$WrnColor = [System.ConsoleColor]::Yellow,
[System.ConsoleColor]$VrbColor = [System.ConsoleColor]::Magenta,
[System.ConsoleColor]$InfColor = [System.ConsoleColor]::Blue
)
& $command *>&1 | ForEach-Object {
$PrintColor =
if ($_ -is [System.Management.Automation.ErrorRecord]) { $ErrColor }
elseif ($_ -is [System.Management.Automation.WarningRecord]) { $WrnColor }
elseif ($_ -is [System.Management.Automation.VerboseRecord]) { $VrbColor }
elseif ($_ -is [System.Management.Automation.InformationRecord]) { $InfColor }
else {$OutColor}
Write-Host -ForegroundColor $PrintColor $_
}
}
测试:
Color {
Write-Output OUT;
Write-Error ERR;
Write-Warning WRN;
Write-Verbose VRB;
Write-Information INF;
Write-Host -ForegroundColor Black HOST;
1234
}
OUT // white
ERR // red
WRN // yellow
INF // blue
HOST // blue
1234 // white
顺便提一下:Write-Host
在此处被强制视为 Information
,因此此脚本会覆盖所有着色。