如何以编程方式将Powershell背景颜色设置为RGB值

时间:2013-09-08 16:06:28

标签: powershell console

目前从控制台颜色中选择16种颜色对我来说不是正确的选择。我想在背景中使用这些更暗的变体。

我绝对可以使用UI设置这些并在那里更改RGB值。

Selecting Blue and changing value to 65

例如,我可以选择Darkblue并在RGB部分选择65 for Blue(128是默认值)。有人可以告诉我如何以编程方式执行此操作。

类似的东西:

(Get-Host).UI.RawUI.BackgroundColor=DarkBlue

但有其他选择。

3 个答案:

答案 0 :(得分:8)

Lee Holmes的这篇老帖解释了如何将颜色更改为您想要的任何值。您必须更改注册表 - http://www.leeholmes.com/blog/2008/06/01/powershells-noble-blue/

Push-Location 
Set-Location HKCU:\Console 
New-Item ".\%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe" 
Set-Location ".\%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe"

New-ItemProperty . ColorTable00 -type DWORD -value 0×00562401 
New-ItemProperty . ColorTable07 -type DWORD -value 0x00f0edee 
New-ItemProperty . FaceName -type STRING -value "Lucida Console" 
New-ItemProperty . FontFamily -type DWORD -value 0×00000036 
New-ItemProperty . FontSize -type DWORD -value 0x000c0000 
New-ItemProperty . FontWeight -type DWORD -value 0×00000190 
New-ItemProperty . HistoryNoDup -type DWORD -value 0×00000000 
New-ItemProperty . QuickEdit -type DWORD -value 0×00000001 
New-ItemProperty . ScreenBufferSize -type DWORD -value 0x0bb80078 
New-ItemProperty . WindowSize -type DWORD -value 0×00320078 
Pop-Location

答案 1 :(得分:4)

此powershell函数模仿命令行调用:color b0

function Set-ConsoleColor ($bc, $fc) {
    $Host.UI.RawUI.BackgroundColor = $bc
    $Host.UI.RawUI.ForegroundColor = $fc
    Clear-Host
}
Set-ConsoleColor 'cyan' 'black'

可以使用以下代码检索控制台颜色名​​称:

[Enum]::GetValues([ConsoleColor])

答案 2 :(得分:1)

我已将此功能添加到我的powershell配置文件中,因为有一个程序经常弄乱我的shell颜色。

$DefaultForeground = (Get-Host).UI.RawUI.ForegroundColor
$DefaultBackground = (Get-Host).UI.RawUI.BackgroundColor
function SetColors
{
    Param
    (
        [string]$Foreground = "",
        [string]$Background = ""
    )

    $ValidColors = "black","blue","cyan","darkblue" ,"darkcyan","darkgray",
        "darkgreen","darkmagenta","darkred","darkyellow","gray","green",
        "magenta","red","white","yellow";

    $Foreground = $Foreground.ToLower()
    $Background = $Background.ToLower()

    if ( $Foreground -eq "" )
    {
        $Foreground = $DefaultForeground
    }
    if ( $Background -eq "" )
    {
        $Background = $DefaultBackground
    }

    if ( $ValidColors -contains $Foreground -and
         $ValidColors -contains $Background )
    {
        $a = (Get-Host).UI.RawUI
        $a.ForegroundColor = $Foreground
        $a.BackgroundColor = $Background
    }
    else 
    {
        write-host "Foreground/Background Colors must be one of the following:"
        $ValidColors 
    }
}
set-alias set-colors SetColors

一些注意事项:

“$ DefaultCololrs =(Get-Host).UI.RawUI”创建的指针类型对象多于对象的实际副本。这意味着如果你以后设置一个不同的变量等于“(Get-Host).UI.RawUI”,并改变一些东西,$ DefaultColors也会改变(这就是为什么我已经确定将它们复制为字符串)。

我试着用很少的运气设置其他颜色(使用十六进制代码),虽然我确实找到Setting Powershell colors with hex values in profile script(我还没有尝试过,因为我不是特别喜欢在注册表中捣乱,默认的颜色列表似乎相当充足。)

我还找到了这个文档:https://technet.microsoft.com/en-us/library/ff406264.aspx,我可能必须稍后使用它来弄清楚如何修改我的“grep”命令(目前我把它别名为select-string)