Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Описывает поддержку escape-последовательностей ANSI в PowerShell.
Длинное описание
PowerShell имеет множество функций, поддерживающих использование escape-последовательностей ANSI для управления отрисовкой выходных данных в приложении терминала, в котором размещена PowerShell.
PowerShell 7.2 добавил новую автоматическую переменную $PSStyleи внес изменения в механизм PowerShell для поддержки вывода текста, украшенного ANSI.
Поддержка терминала ANSI
Функции ANSI предназначены для обеспечения совместимости с терминалами на основе xterm. Дополнительные сведения см. в разделе xterm в Википедии.
В Windows 10 и более поздних версиях хост консоли Windows совместим с xterm. Приложение терминала Windows
В macOS приложение терминала по умолчанию совместимо с xterm.
Для Linux каждый дистрибутив поставляется с другим приложением терминала. Ознакомьтесь с документацией по распространению, чтобы найти подходящее приложение терминала.
$PSStyle
Переменная имеет следующие свойства:
- сброс — отключает все элементы оформления
- Мерцание — включает мерцание
- BlinkOff — отключает мигание
- полужирный — включение полужирного шрифта
- BoldOff — отключает полужирный шрифт
- Dim — включает Dim (добавлено в PowerShell 7.4)
- DimOff — отключает Dim (добавлено в PowerShell 7.4)
- Скрытый — Включение 'Скрытого'
- HiddenOff — отключает скрытость
- обратный — включает функцию 'Обратный'
- Отключить Reverse — выключает функцию Reverse
- Курсив — переключает режим курсива
- ItalicOff — отключает курсив
- Подчеркивание — включение подчеркивания
- ОтключитьПодчеркивание — отключает подчеркивание
- Strikethrough — включается удар
- StrikethroughOff - Отключает зачёркивание
- OutputRendering — управление использованием визуализации выходных данных
- Форматирование — объект вложенной структуры, контролирующий форматирование по умолчанию для выходных потоков
- Progress — вложенный объект, управляющий отрисовкой индикаторов прогресса
- FileInfo — вложенный объект для управления цветом объектов FileInfo.
- передний план — вложенный объект для управления окраской переднего плана
- Фоновый — вложенный объект для управления цветом фона
Базовые члены возвращают строки escape-последовательностей ANSI, которые соответствуют их именам. Значения задаются для настройки. Например, можно изменить полужирный шрифт на подчёркнутый шрифт. Имена свойств упрощают создание форматированных строк с помощью функции автозаполнения с помощью клавиши Tab.
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Следующие члены управляют тем, как используется форматирование ANSI.
$PSStyle.OutputRendering— это перечислениеSystem.Management.Automation.OutputRenderingсо значениями:ANSI: escape-последовательности ANSI всегда передаются через as-is.Важный
При перенаправлении выходных данных в файл или конвейер, предназначенный для выполнения на следующем этапе, следует использовать режим ANSI . Это гарантирует, что выходные данные не изменяются. При использовании любого другого режима выходные данные изменяются путем удаления escape-последовательностей ANSI, которые могут изменить поведение выполнения.
PlainText: escape-последовательности ANSI всегда удаляются, оставляя только обычный текст. В удаленных сеансах, если для удаленного узла задано значениеPlainText, выходные данные будут удалены из escape-последовательностей ANSI перед отправкой обратно в локальный клиент.Host: это поведение по умолчанию. Escape-последовательности ANSI удаляются из перенаправленного или передаваемого через каналы вывода. Дополнительные сведения см. в разделе Перенаправление выходных данных.
Элементы
$PSStyle.Backgroundи$PSStyle.Foreground— это строки, которые содержат последовательности ANSI escape для 16 стандартных цветов консоли.BlackBrightBlackWhiteBrightWhiteRedBrightRedMagentaBrightMagentaBlueBrightBlueCyanBrightCyanGreenBrightGreenYellowBrightYellow
Значения задаются и могут содержать любое количество escape-последовательностей ANSI. Существует также метод
FromRgb()для указания 24-разрядного цвета. Существует два способа вызова методаFromRgb().string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)Любой из следующих примеров задает цвет фона 24-разрядного цвета
Beige.$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)$PSStyle.Formatting— это вложенный объект для управления форматированием по умолчанию сообщений об отладке, ошибках, подробной информации, предупреждениях, а также заголовков списков и таблиц. Вы также можете управлять свойствами, такими как полужирное начертание и подчеркивание. Он заменяет$Host.PrivateDataкак способ управления цветами для рендеринга форматов.$Host.PrivateDataпродолжает существовать для обратной совместимости, но не подключен к$PSStyle.Formatting.$PSStyle.Formattingимеет следующие участники:- FormatAccent — форматирование элементов списка
- ErrorAccent — форматирование метаданных об ошибке
- Ошибка — форматирование сообщений об ошибках
- Предупреждение, форматирование предупреждений
- подробный — форматирование подробных сообщений
- Отладка — форматирование отладочных сообщений
- TableHeader — форматирование заголовков таблиц
- CustomTableHeaderLabel — форматирование заголовков таблиц, которые не являются фактически свойствами объекта
- FeedbackName — форматирование имени поставщика отзывов (добавлено в качестве экспериментальной функции в PowerShell 7.4)
- FeedbackText — форматирование сообщений отзывов (добавлено в качестве экспериментальной функции в PowerShell 7.4)
- FeedbackAction — форматирование предлагаемых поставщиком отзывов действий (добавлено в качестве экспериментальной функции в PowerShell 7.4)
$PSStyle.Progressпозволяет контролировать отрисовку панели прогресса.- стиль — строка ANSI, задающая стиль отрисовки.
-
MaxWidth — задает максимальную ширину представления. По умолчанию используется
120. Минимальное значение равно 18. -
View — перечисление со значениями
MinimalиClassic.Classic— это существующая отрисовка без изменений.Minimal— это минимальная однолинейная отрисовка.Minimal— это значение по умолчанию. -
UseOSCIndicator — по умолчанию
$false. Задайте для этого значение$trueдля терминалов, поддерживающих индикаторы OSC.
Заметка
Если узел не поддерживает виртуальный терминал,
$PSStyle.Progress.Viewавтоматически устанавливается наClassic.В следующем примере стиль отрисовки устанавливается на минимальный индикатор выполнения.
$PSStyle.Progress.View = 'Minimal'$PSStyle.FileInfo— это вложенный объект для управления цветом объектов FileInfo.Каталог — встроенный элемент, указывающий цвет каталогов
Символьная связь — встроенный компонент для указания цвета символьных ссылок
Исполняемый файл — встроенный член для указания цвета исполняемого файла.
Extension. Используйте этот элемент для определения цветов для разных расширений файлов. Член расширения предопределяет цвета для расширений архивов и файлов PowerShell.
В следующем примере показано, как изменить цвета для различных
FileInfoпараметров и определенных расширений файлов. Цвета выбираются для хорошой работы на светлом фоне терминала.$PSStyle.FileInfo.Directory = $PSStyle.Background.FromRgb(0x2f6aff) + $PSStyle.Foreground.BrightWhite $PSStyle.FileInfo.SymbolicLink = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Executable = $PSStyle.Foreground.BrightMagenta $PSStyle.FileInfo.Extension['.ps1'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.ps1xml'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.psd1'] = $PSStyle.Foreground.Cyan $PSStyle.FileInfo.Extension['.psm1'] = $PSStyle.Foreground.Cyan
Командлеты, создающие выходные данные ANSI
- Командлеты Markdown — командлет Show-Markdown отображает содержимое файла, содержащего текст markdown. Выходные данные отображаются с помощью последовательностей ANSI для представления различных стилей. Вы можете управлять определениями стилей с помощью командлетов Get-MarkdownOption и Set-MarkdownOption.
- Командлеты PSReadLine — модуль PSReadLine использует последовательности ANSI для раскрашивания элементов синтаксиса PowerShell в командной строке. Цвета можно настроить с помощью Get-PSReadLineOption и Set-PSReadLineOption.
-
Get-Error— командлет Get-Error возвращает подробное представление объекта Error, отформатированного, чтобы облегчить восприятие. -
Select-String. Начиная с PowerShell 7.0, select-String использует последовательности ANSI для выделения соответствующих шаблонов в выходных данных. -
Write-Progress— выходные данные ANSI управляются с помощью$PSStyle.Progress, как описано выше. Дополнительные сведения см. в Write-Progress
Перенаправление выходных данных в режиме узла
По умолчанию $PSStyle.OutputRendering — это хост. Escape-последовательности ANSI удаляются из перенаправленного или передаваемого через каналы вывода.
OutputRendering применяется только к отрисовке в Host, Out-Fileи Out-String. Выходные данные из собственных исполняемых файлов не затрагиваются.
PowerShell 7.2.6 изменил поведение Out-File и Out-String для следующих сценариев:
- Если входной объект является чистой строкой, эти командлеты сохраняют строку без изменений независимо от параметра OutputRendering.
- Если к объекту ввода необходимо применить представление форматирования, эти командлеты сохраняют или удаляют escape-последовательности из выходных строк форматирования на основе параметра OutputRendering.
Это критическое изменение в этих командлетах по сравнению с PowerShell 7.2.
OutputRendering не применяется к выходным данным из процесса узла PowerShell, например при запуске pwsh из командной строки и перенаправлении выходных данных.
В следующем примере PowerShell запускается в Linux из bash. Командлет Get-ChildItem создает украшенный ANSI текст. Так как перенаправление происходит в процессе bash за пределами узла PowerShell, выходные данные не влияют на OutputRendering.
pwsh -NoProfile -Command 'Get-ChildItem' > out.txt
При проверке содержимого out.txt отображаются escape-последовательности ANSI.
Напротив, при перенаправлении в сеансе PowerShell OutputRendering влияет на перенаправленные выходные данные.
pwsh -NoProfile -Command 'Get-ChildItem > out.txt'
При проверке содержимого out.txt нет escape-последовательностей ANSI.
Отключение выходных данных ANSI
Поддержку Escape-последовательностей ANSI можно отключить с помощью переменных среды TERM или NO_COLOR.
Следующие значения параметра $Env:TERM изменяют поведение следующим образом:
-
dumb— задает$Host.UI.SupportsVirtualTerminal = $false -
xterm-mono— задает$PSStyle.OutputRendering = PlainText -
xterm— задает$PSStyle.OutputRendering = PlainText
Если $Env:NO_COLOR существует, то $PSStyle.OutputRendering устанавливается в PlainText. Дополнительные сведения о переменной среды NO_COLOR см. в https://no-color.org/.
Использование $PSStyle из C#
Разработчики C# могут получить доступ к PSStyle как паттерн синглтон, как показано в следующем примере:
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle существует в пространстве имен System.Management.Automation.
Подсистема PowerShell включает следующие изменения:
- Система форматирования PowerShell обновляется с учётом
$PSStyle.OutputRendering. - Тип
StringDecoratedдобавляется для обработки экранированных строк ANSI. - Логическое свойство
string IsDecoratedбыло добавлено для возврата true, если строка содержитESCилиC1 CSIпоследовательности символов. - Свойство
Lengthстроки возвращает длину текста без escape-последовательностей ANSI. - Метод
StringDecorated Substring(int contentLength)возвращает подстроку, начиная с индекса 0 до длины содержимого, которая не является частью escape-последовательностей ANSI. Это необходимо для форматирования таблицы, чтобы обрезать строки и сохранить управляющие последовательности ANSI, не занимающие место для печатных символов. - Метод
string ToString()остается неизменным и возвращает версию строки с открытым текстом. - Метод
string ToString(bool Ansi)возвращает необработанную строку ANSI, внедренную, если параметрAnsiпринимает значение true. В противном случае возвращается версия текста без оформления, из которой удалены escape-последовательности ANSI. - Метод
FormatHyperlink(string text, uri link)возвращает строку, содержащую управляющие последовательности ANSI, используемые для оформления гиперссылок. Некоторые узлы терминала, такие как Windows Terminal, поддерживают эту разметку, что позволяет делать отрисованный текст кликабельным в терминале.
Статические методы класса PSStyle
PowerShell 7.4 добавляет три новых статических метода в класс [System.Management.Automation.PSStyle].
[System.Management.Automation.PSStyle] | Get-Member -Static -MemberType Method
TypeName: System.Management.Automation.PSStyle
Name MemberType Definition
---- ---------- ----------
Equals Method static bool Equals(System.Object objA, System.Object objB)
MapBackgroundColorToEscapeSequence Method static string MapBackgroundColorToEscapeSequence(System.ConsoleColor bac…
MapColorPairToEscapeSequence Method static string MapColorPairToEscapeSequence(System.ConsoleColor foregroun…
MapForegroundColorToEscapeSequence Method static string MapForegroundColorToEscapeSequence(System.ConsoleColor for…
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object objB)
Эти методы позволяют преобразовать значения ConsoleColor в escape-последовательности ANSI для переднего плана и фоновых цветов или для сочетания обоих.
В следующих примерах показаны escape-последовательности ANSI, созданные этими методами.
using namespace System.Management.Automation
[PSStyle]::MapBackgroundColorToEscapeSequence('Black') | Format-Hex
Label: String (System.String) <3A04954D>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 1B 5B 34 30 6D �[40m
[PSStyle]::MapForegroundColorToEscapeSequence('Red') | Format-Hex
Label: String (System.String) <38B50F41>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 6D �[91m
[PSStyle]::MapColorPairToEscapeSequence('Red','Black') | Format-Hex
Label: String (System.String) <365A5875>
Offset Bytes Ascii
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
------ ----------------------------------------------- -----
0000000000000000 1B 5B 39 31 3B 34 30 6D �[91;40m
См. также
PowerShell