Как программно установить цвет фона Powershell в значение RGB

текущий выбор 16 цветов из цветов консоли не является правильным выбором для меня. Я хотел бы использовать гораздо более темные варианты этих для фона.

Я мог бы определенно установить их с помощью пользовательского интерфейса и изменить значение RGB там.

Selecting Blue and changing value to 65

например, я мог бы выбрать темно-синий и выбрать 65 для синего в разделе RGB (128 по умолчанию). Может кто-нибудь сказать мне, как это сделать программно.

что-то например:

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

но с дополнительными опциями.

3 ответов


этот старый пост ли Холмса объясняет, как вы можете изменить цвет на любое значение, которое вы хотите. Вы должны изменить реестр -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

эта функция powershell имитирует вызов строки cmd:
цвет В0

function color ($bc,$fc) {
$a = (Get-Host).UI.RawUI
$a.BackgroundColor = $bc
$a.ForegroundColor = $fc ; cls}

цвета "бирюзовый", "черный"

имена цветов Powershell:

Черный Белый
Серый Темно-Серый
Красный Темно-Красный
Синий Темно-Синий
Зеленый Темно-Зеленый
Желтый DarkYellow
Голубой Шоколад
Magenta DarkMagenta


Я добавил эту функцию в свой профиль powershell, так как есть программа, которая регулярно портит цвета моей оболочки.

$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).ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.RawUI" создает больше объекта типа указателя, чем фактическую копию объекта. Это означает, что если вы позже установите другую переменную, равную "(Get-Host).ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.RawUI", и изменить вещи, $DefaultColors также изменится (именно поэтому я сделал обязательно скопируйте их здесь как строки).

Я попытался установить другие цвета (используя шестнадцатеричные коды) с очень небольшой удачей, хотя я нашел настройка цветов Powershell с шестнадцатеричными значениями в скрипте профиля (Я просто еще не пробовал, так как я не особенно люблю возиться в реестре, и список цветов по умолчанию казался довольно достаточным).

Я также нашел этот документ:https://technet.microsoft.com/en-us/library/ff406264.aspx, который мне, возможно, придется использовать позже, чтобы выяснить, как изменить мою команду "grep" (в настоящее время у меня есть псевдоним для select-string)