Список всех цветов, доступных для 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
Подробнее об этом можно прочитать здесь: