PowerShell获取write-host的默认前景色

sil*_*ent 5 powershell

我有一个函数将输出日志写入文件和控制台.写主机部分我想要着色一点;-)

switch($logLevel)
{
   "FATAL" { $ConsoleWriteColor = "blue"; break }
   "ERROR" { $ConsoleWriteColor = "red"; break }
   "WARN" { $ConsoleWriteColor = "yellow"; break }
   default { $ConsoleWriteColor = "white"; break }

}
Write-Host -ForegroundColor $ConsoleWriteColor "Hello world"
Run Code Online (Sandbox Code Playgroud)

所以我的问题是默认情况:我如何获得当前的前景色?我想它不会一直是白色的吗?!

小智 8

可以像这样获得当前的前景和背景.

PS>(get-host).ui.rawui.ForegroundColor
Gray
PS>(get-host).ui.rawui.BackgroundColor
Black
Run Code Online (Sandbox Code Playgroud)

  • 当我在 Powershell ISE (v5.1.14409.1012) 中运行此命令时,它返回“-1”,它不会转换为“[System.ConsoleColor]”。这意味着这将失败:`Write-Host -ForegroundColor ([System.ConsoleColor]-1) "Hello world"` (5认同)
  • 是的,你是对的......确实有效,但是当文本明显为白色时,它会显示 DarkYellow ?! (2认同)

Jay*_*zel 6

为了在 PowerShell 中检索前景色,我发现这个命令可以工作:

[系统.控制台]::前景颜色

测试于:

  • Win 7:ISE 和本机 shell
  • Win 10:ISE 和本机 shell
  • Win 11:ISE、本机 shell 和终端

为了清晰起见进行了编辑

  • @joharr我相信问题的重点是获取当前值,而不是设置它。据我所知,从我测试过的功能来看,该功能仍然有效。 (2认同)