PowerShell - 更改深红色

问题描述 投票:0回答:1

一点色盲问题:

[ConsoleColor]::DarkRed
(还有红色)对我来说几乎是看不见的。我必须选择文本才能阅读它。

我一直在 PowerShell 中配置一些东西以使内容更具可读性:

$host.PrivateData.ErrorForegroundColor = 'Yellow'

非常酷,但是当然有些应用程序、库、工具等会做这样的事情:

Write-Host "Error!" -ForegroundColor DarkRed

所以基本上我想用其他东西覆盖

[ConsoleColor]::DarkRed
。我一直在研究反射,但似乎不可能。

有什么办法可以实现这个目标吗?

powershell colors color-blindness
1个回答
0
投票

您可以利用 PowerShell 的 命令优先级 并定义一个名为 Write-Host 的自定义

函数
,它会隐藏内置 cmdlet,并使用修改后的参数调用后者。

如果您将以下内容放入

$PROFILE
文件中,则对
Write-Host
的所有(非模块限定)调用将有效地将
-ForegroundColor Red
-ForegroundColor DarkRed
转换为
-ForegroundColor Yellow
- 根据需要进行调整。

注:

  • 下面的代码是所谓的代理函数,其骨架是使用这个答案底部部分中描述的方法创建的。
function global:Write-Host {
  <#
  .ForwardHelpTargetName Write-Host
  .ForwardHelpCategory Cmdlet
  #>
  [CmdletBinding(HelpUri = 'https://go.microsoft.com/fwlink/?LinkID=2097137', RemotingCapability = 'None')]
  param(
    [Parameter(Position = 0, ValueFromPipeline = $true, ValueFromRemainingArguments = $true)]
    [Alias('Msg', 'Message')]
    [System.Object]
    ${Object},
  
    [switch]
    ${NoNewline},
  
    [System.Object]
    ${Separator},
  
    [System.ConsoleColor]
    ${ForegroundColor},
  
    [System.ConsoleColor]
    ${BackgroundColor})
  
  begin {

    # Translate -ForegroundColor Red / DarkRed to a different color of choice.
    if (($fgColor = $PSBoundParameters.ForegroundColor) -and $fgColor -in 'Red', 'DarkRed') {
      $PSBoundParameters.ForegroundColor = 'Yellow'
    }

    $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Utility\Write-Host', [System.Management.Automation.CommandTypes]::Cmdlet)
    $scriptCmd = { & $wrappedCmd @PSBoundParameters }
  
    $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
    $steppablePipeline.Begin($PSCmdlet)
  }
  
  process {
    try {
      $steppablePipeline.Process($_)
    }
    catch {
      $PSCmdlet.ThrowTerminatingError($_)
    }
  }
  
  end {
    try {
      $steppablePipeline.End()
    }
    catch {
      $PSCmdlet.ThrowTerminatingError($_)
    }
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.