about_ANSI_Terminals
Краткое описание
Описывает поддержку для escape-последовательностей ANSI в PowerShell.
Подробное описание
PowerShell имеет множество функций, поддерживающих использование escape-последовательностей ANSI для управления отрисовкой выходных данных в приложении терминала, в котором размещена PowerShell.
PowerShell 7.2 добавила новую автоматическую переменную $PSStyle
и изменения в подсистеме PowerShell для поддержки выходных данных текста, украшенного ANSI.
Поддержка терминала ANSI
Функции ANSI предназначены для обеспечения совместимости с терминалами на основе xterm. Дополнительные сведения см. в разделе xterm в Википедии.
В Windows 10 и более поздних версиях узел консоли Windows совместим с xterm. Приложение Терминал Windows также совместимо с xterm.
В macOS приложение терминала по умолчанию совместимо с xterm.
Для Linux каждый дистрибутив поставляется с другим приложением терминала. Ознакомьтесь с документацией по распространению, чтобы найти подходящее приложение терминала.
$PSStyle
Переменная имеет следующие свойства:
- Сброс — выключение всех украшений
- Мигание — включение мигания
- BlinkOff — отключает мигание
- Полужирный — включает полужирный
- BoldOff — отключает полужирный
- Dim — включение Dim (добавлено в PowerShell 7.4)
- DimOff — отключает Dim (добавлено в PowerShell 7.4)
- Скрытый — включает скрытый
- HiddenOff — отключает скрытые
- Обратный — включает обратный
- ReverseOff — отключает обратный режим
- Курсив — превращает курсив на
- Курсив - Превращает курсив
- Подчеркивание . Включает подчеркивание
- Подчеркивание. Отключает подчеркивание
- Зачеркнутый - Поворот удара по
- StrikethroughOff - Превращается удар покинуть
- OutputRendering — управление при использовании отрисовки выходных данных
- Форматирование — вложенный объект, который управляет форматированием по умолчанию для выходных потоков
- Progress — вложенный объект, который управляет отрисовкой индикаторов хода выполнения
- FileInfo — вложенный объект для управления цветом объектов FileInfo.
- Передний план — вложенный объект для управления цветом переднего плана
- Фон — вложенный объект для управления цветом фона
Базовые элементы возвращают строки escape-последовательностей ANSI, сопоставленные с их именами. Значения можно настраивать. Например, можно изменить полужирный шрифт на подчеркнутую. Имена свойств упрощают создание украшенных строк с помощью завершения табуляции:
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Следующие члены управляют тем, как используется форматирование ANSI.
$PSStyle.OutputRendering
перечислениеSystem.Management.Automation.OutputRendering
со значениями:ANSI
: escape-последовательности ANSI всегда передаются через как есть.Внимание
При перенаправлении выходных данных в файл или конвейер, предназначенный для выполнения ниже, следует использовать режим ANSI . Это гарантирует, что выходные данные не изменяются. При использовании любого другого режима выходные данные изменяются путем удаления escape-последовательностей ANSI, которые могут изменить поведение выполнения.
PlainText
: escape-последовательности ANSI всегда удаляются таким образом, чтобы он был только обычным текстом. В удаленных сеансах, если для удаленного узла заданоPlainText
значение, выходные данные будут удалены из escape-последовательностей ANSI перед отправкой обратно в локальный клиент.Host
: это поведение по умолчанию. Escape-последовательности ANSI удаляются из перенаправленных или каналов выходных данных. Дополнительные сведения см. в разделе "Перенаправление выходных данных".
$PSStyle.Foreground
Элементы$PSStyle.Background
— это строки, содержащие escape-последовательности ANSI для 16 стандартных цветов консоли.Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
Значения задаются и могут содержать любое количество 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. - Представление — перечисление со значениями
Minimal
иClassic
.Classic
— существующий рендеринг без изменений.Minimal
— минимальный рендеринг одной строки. Значение по умолчанию —Minimal
. - UseOSCIndicator — по умолчанию
$false
. Установите это значение$true
для терминалов, поддерживающих индикаторы OSC.
Примечание.
Если узел не поддерживает виртуальный терминал, для
$PSStyle.Progress.View
автоматически устанавливается значениеClassic
.В следующем примере стиль отрисовки устанавливается на минимальную индикатор выполнения.
$PSStyle.Progress.View = 'Minimal'
$PSStyle.FileInfo
— вложенный объект для управления цветом объектов FileInfo .- Каталог — встроенный элемент, указывающий цвет для каталогов
- Символьная ссылка — встроенный элемент, указывающий цвет символьных ссылок
- Исполняемый файл — встроенный элемент, указывающий цвет исполняемых файлов.
- Расширение — используйте этот элемент для определения цветов для разных расширений файлов. Элемент Расширения изначально включает расширения для файлов архива и PowerShell.
Командлеты, создающие выходные данные 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
, как описано выше. Дополнительные сведения см. в разделе "Выполнение записи"
Перенаправление выходных данных в Host
режиме
По умолчанию $PSStyle.OutputRendering
для узла задано значение Host. Escape-последовательности ANSI удаляются из перенаправленных или каналов выходных данных.
OutputRendering применяется только к отрисовке в узле и Out-String
Out-File
. Выходные данные из собственных исполняемых файлов не затрагиваются.
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
xtermm
-Задает$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
добавляется для обработки escape-строк ANSI. string IsDecorated
Логическое свойство было добавлено для возврата true, когда строка содержитESC
илиC1 CSI
последовательности символов.- Свойство
Length
строки возвращает длину текста без escape-последовательностей ANSI. - Метод
StringDecorated Substring(int contentLength)
возвращает подстроку, начиная с индекса 0 до длины содержимого, которая не является частью escape-последовательностей ANSI. Это необходимо для усечения строк и сохранения escape-последовательностей ANSI, которые не занимают место печатаемых символов, при форматировании таблицы. - Метод
string ToString()
остается неизменным и возвращает версию строки с открытым текстом. - Метод
string ToString(bool Ansi)
возвращает необработанную внедренную строку ANSI, еслиAnsi
параметр имеет значение true. В противном случае возвращается версия с открытым текстом с удаленными escape-последовательностями ANSI. - Метод
FormatHyperlink(string text, uri link)
возвращает строку, содержащую escape-последовательности ANSI, используемые для декорирования гиперссылок. Некоторые узлы терминала, например Терминал Windows, поддерживают такую разметку, которая позволяет щелкать отображаемый в терминале текст.
Статические методы класса 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