Список всех цветов, доступных для PowerShell?

Я ищу список всех цветов, которые я могу использовать в PowerShell. Поскольку нам нужно предоставить имена, а не шестнадцатеричные числа, трудно определить, существует ли цвет или нет, по крайней мере, если вы не знаете, как:))

Например, как -foregroundcolor

write-host "hello world" -foregroundcolor "red"

8 ответов

Решение

Цвета консоли указаны в перечислении, называемом [System.ConsoleColor]. Вы можете перечислить все значения, используя статический метод GetValues ​​из [Enum]

[Enum]::GetValues([System.ConsoleColor])

или просто

[Enum]::GetValues([ConsoleColor])

Красивая сетка

$colors = [enum]::GetValues([System.ConsoleColor])
Foreach ($bgcolor in $colors){
    Foreach ($fgcolor in $colors) { Write-Host "$fgcolor|"  -ForegroundColor $fgcolor -BackgroundColor $bgcolor -NoNewLine }
    Write-Host " on $bgcolor"
}

скриншот красочного вывода

https://gist.github.com/timabell/cc9ca76964b59b2a54e91bda3665499e

Я нашел полезным предварительно просмотреть, как цвета консоли будут отображаться с помощью простой вспомогательной функции:

function Show-Colors( ) {
  $colors = [Enum]::GetValues( [ConsoleColor] )
  $max = ($colors | foreach { "$_ ".Length } | Measure-Object -Maximum).Maximum
  foreach( $color in $colors ) {
    Write-Host (" {0,2} {1,$max} " -f [int]$color,$color) -NoNewline
    Write-Host "$color" -Foreground $color
  }
}

Как насчет проверки помощи? Вот так, get-help write-host скажу тебе:

[-BackgroundColor {Black | DarkBlue | DarkGreen | DarkCyan | DarkRed | DarkMagenta | DarkYellow | Gray | DarkGray | Blue | Green | Cyan | Red | Magenta | Yellow | White}]
[-ForegroundColor {Black | DarkBlue | DarkGreen | DarkCyan | DarkRed | DarkMagenta | DarkYellow | Gray | DarkGray | Blue | Green | Cyan | Red | Magenta | Yellow | White}]

Я не собираюсь записывать все ~7 миллионов (которые вы, по-видимому, можете использовать сейчас, если ваш терминал может их отображать), но вот основные из них, названные в честь вас,
я включил другие вещи, напримерbold", underline, а также negative.

Просто назовите их так (fg за foreground, bg за background, а также bf/bg для "яркого" переднего / заднего плана. default сбросить и есть fg.default + bg.default тоже для сброса их индивидуально)

$style.fg.green + 'Im green!'
'I feel a little ',$style.bg.black,' moody' -join ''
"Math is pretty $($style.negative)$(191 * 7)$($style.default) too"

Эти 24-битные цвета? $style.bg.rgb -f 120,32,230. Может быть, вы используете pwsh на Linux или работаете с nix?$style.fg.x -f 30 Цвета xterm заставят вас чувствовать себя как дома.

#console colours (VT escape sequences)
$style=@(
    0, 'default', 'bold',
    4, 'underline',
    24, 'nounderline',
    7, 'negative',
    27, 'positive',
    '_fg',
        30, 'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white',
        39, 'default',
    '_bg',
        'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white',
        49, 'default',
    '_bf', 90, 'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white',
    '_bb', 100, 'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'
) `
| &{
    Begin {
        $sequence="$([char]27)[{0}m"
        $style=@{
            fg=@{
                rgb=$sequence -f '38;2;{0};{1};{2}'
                x=$sequence -f '38;5;{0}'
            };
            bg=@{
                rgb=$sequence -f '48;2;{0};{1};{2}'
                x=$sequence -f '48;5;{0}'
            };
            bf=@{};
            bb=@{};
        }
        $current=$style
        $index=$null
    }
    Process {
        Switch -regex ($_) {
            '\d' { $index=$_ }
            '^_' { $current=$style[$_ -replace '^.',''] }
            Default {
                $current[$_]=$sequence -f $index++
#comment me out
"$($current[$_])$($_)`t" | Out-Host
            }
        }
    }
    End {
        $style
#more demonstrations
@(($style.bg.rgb -f 120,32,230), ($style.fg.x -f 30), 'hello', $style.default) -join '' | Out-Host
    }
}

По-видимому, вы также можете установить гиперссылки и обрезанный текст!
https://github.com/PowerShell/PowerShell/issues/7744

Вот пример отображения всех цветовых комбинаций цветов фона и переднего плана.

$FGcolors = [enum]::GetValues([System.ConsoleColor])
$BGcolors = [enum]::GetValues([System.ConsoleColor])

Foreach ($FGcolor in $FGcolors)
{
    Foreach ($BGcolor in $BGcolors)
    {
        Write-Host ("Foreground: $FGColor BackGround: $BGColor")  -ForegroundColor $FGcolor -BackgroundColor $BGcolor
    }
}

Это не должно быть так сложно. Завершение вкладки - ваш друг. Нажатие табуляции после-foregroundcolor(или любое уникальное сокращение) перечислит их. В режиме редактирования emacs все они будут перечислены сразу.

set-psreadlineoption -editmode emacs  # put in your $profile


write-host hello world -f # press tab, it actually appears above it

Black        Cyan         DarkCyan     DarkGreen    DarkRed      Gray         Magenta      White        
Blue         DarkBlue     DarkGray     DarkMagenta  DarkYellow   Green        Red          Yellow    

Это также находится в документах под -foregroundcolor: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-host?view=powershell-7

Если вы пришли сюда из Google и хотите узнать, какие имена цветов доступны в Windows, вы можете сделать:

      Add-Type –assemblyName PresentationFramework; [System.Windows.Media.Colors] | Get-Member -static -Type Property |Select -Expand Name

(Обратите внимание, как вам сначала нужно загрузить PresentationFrameworkсборка.)

      AliceBlue
AntiqueWhite
Aqua
Aquamarine
Azure
Beige
Bisque
Black
BlanchedAlmond
Blue
BlueViolet
Brown
BurlyWood
CadetBlue
Chartreuse
...

Только некоторые из них можно распечатать по их имени в консоли Powershell, хотя новая консоль поддерживает «все» (24-битные TRUE) цвета с помощью управляющих последовательностей цветов ANSI и при включении. VT= Поддержка виртуального терминала консоли )

Чтобы получить список ( Write-Host) печатные имена, вы можете сделать это:

      # Add-Type –assemblyName PresentationFramework
$colors = [System.Windows.Media.Colors] | Get-Member -static -Type Property |Select -Expand Name
Foreach ($col in $colors) { try { Write-Host "$col"  -ForegroundColor $col -BackgroundColor Black } catch {} }

Чтобы получить полный список всех названий цветов, определенных Windows , вы можете запустить эту магию:

      function argb2box { $c = ($args[0] -split '#..(.{2})(.{2})(.{2})'); $r,$g,$b = ("$c" -join(' ')).trim() -split ' '; return "`e[48;2;$([Int32]"0x$r");$([Int32]"0x$g");$([Int32]"0x$b")m    `e[0m"; }
$sc=[System.Windows.Media.Colors]; $sc | Get-Member -static -Type Property |Select -Expand Name| ForEach { [pscustomobject] @{ ARGB = "$($sc::$_)"; MEOW = $(argb2box "$($sc::$_)") ; Color = $_}}

# You can sort on HEX values by adding:
# | sort -Property ARGB


Подробнее об этом можно прочитать здесь:

Другие вопросы по тегам