Настройка стиля в PowerShell 7.2

Опубликовано: 14 Марта, 2023
Настройка стиля в PowerShell 7.2

Одной из самых долгожданных новых функций, встроенных Microsoft в PowerShell 7.2, является поддержка escape-последовательностей ANSI. Если вы не знакомы с escape-последовательностями ANSI, они являются стандартным форматом для декоративного текста и впервые были использованы в Xterm. Эти последовательности позволяют создавать цветной текст и добавлять такие эффекты, как выделение полужирным шрифтом, курсивом и подчеркиванием.

Это не означает, что раньше было невозможно создать цветной текст с помощью PowerShell. На самом деле это было очень легко сделать. Однако вновь обретенная в PowerShell поддержка escape-последовательностей ANSI позволяет окрашивать выходные данные PowerShell более стандартизированным способом. Это также дает вам несколько дополнительных параметров форматирования, которые (насколько мне известно) ранее не поддерживались PowerShell.

Старый способ ведения дел

Как упоминалось ранее, PowerShell уже давно поддерживает использование цвета. Наиболее часто используемый метод создания цветного вывода включал добавление цвета переднего плана и/или цвета фона к командлету write-host. Если, например, вы хотите отобразить белый текст на красном фоне, вы можете сделать это с помощью такой команды:

Write-Host «Hello World» - ForegroundColor White - BackgroundColor Red

Вы можете увидеть, как это выглядит на рисунке ниже. Что более важно, так это то, что рисунок подтверждает, что, несмотря на новую поддержку PowerShell escape-последовательностей ANSI, старый метод генерирования цветного вывода по-прежнему работает так же, как и всегда.

Изображение 4153
Это устаревший метод форматирования выходного текста в PowerShell.

Метод ANSI

Метод управляющей последовательности ANSI работает немного иначе, чем то, что я вам только что показал, хотя, как вы увидите, есть некоторые сходства. Microsoft реализовала поддержку управляющих последовательностей ANSI с помощью переменной с именем $PSStyle.

В простейшей форме есть три элемента информации, которые необходимо предоставить при использовании этой переменной. Во-первых, вы должны указать имя самой переменной. Во-вторых, вы должны указать имя элемента, на который вы пытаетесь повлиять (например, фон). В-третьих, вы должны указать цвет, который хотите использовать. Эти три элемента разделены точками. Например, если вы хотите сделать фон красным, введите: $PSStyle.Background.Red. Между прочим, красный цвет, создаваемый этой командой, довольно тусклый. Если вы предпочитаете более яркий цвет, просто измените красный на ярко-красный. Вы можете увидеть, как это выглядит на рисунке ниже.

Изображение 4154
Вы можете использовать переменную $PSStyle для установки цвета фона.

Конечно, с помощью переменной $PSStyle можно сделать намного больше, чем просто задать цвет фона PowerShell. Я не собираюсь вдаваться во все, что вы можете сделать с помощью $PSStyle. Некоторые варианты использования действительно уникальны и выходят далеко за рамки этой статьи, хотя я надеюсь рассказать о некоторых из них в будущем. Например, есть свойства $PSStyle, которые можно использовать для форматирования индикаторов выполнения или файловых объектов. Некоторые из наиболее полезных свойств включают в себя:

  • Фон
  • Передний план
  • мигать
  • Смелый
  • Скрытый
  • Задний ход
  • Курсив
  • Подчеркнуть

Стоит отметить, что для большинства из этих свойств есть свойства Off, за исключением Foreground и Background. Предположим, например, что вы используете свойство Bold для выделения текста жирным шрифтом. После того, как этот текст будет выделен жирным шрифтом, вы можете использовать свойство BoldOff, чтобы предотвратить выделение полужирным последующим текстом. Существует также свойство «Сброс», которое вы можете использовать для отключения всех текстовых украшений, вместо того, чтобы отключать каждое украшение по отдельности.

Итак, давайте на мгновение предположим, что я хотел вывести фразу «Вот как вы выделяете текст жирным шрифтом в PowerShell» и что я хотел выделить слово «жирным шрифтом». Вот как вы можете это сделать:

«$($PSStyle.Reset)Вот как вы $($PSStyle.bold)выделены жирным шрифтом$($PSStyle.BoldOff) в PowerShell»

Технически мне не нужно было начинать с использования свойства Reset, но я хотел показать вам, как можно использовать Reset для отмены любых других действующих стилей. Это означает, что слова «вот как ты» отображаются в обычном тексте. Свойство Bold применяется к слову «полужирный», а затем свойство BoldOff заставляет оставшийся текст отображаться обычным шрифтом. Вы можете увидеть, как это выглядит ниже. Между прочим, вы заметите, что мне не нужно было указывать цвет вместе с этими свойствами, потому что не каждое свойство требует цвета.

Изображение 4155
Вот как вы выделяете слово в предложении.

Так что, если вы хотите включить эти типы escape-последовательностей ANSI в обычную команду Write-Host? Вы можете использовать их почти так же, как я делал в предыдущем примере, но есть более чистый метод, который я предпочитаю использовать.

Представьте на мгновение, что я создаю сценарий PowerShell и хочу, чтобы весь выводимый текст отображался как белый текст на красном фоне. Первое, что я обычно делаю в такой ситуации, — это сопоставляю стиль с переменной. Вот пример:

$Style = "$($PSStyle.Background.BrightRed)$($PSStyle.Foreground.BrightWhite)"

Определив переменную, вы можете включить ее в оператор Write-Host. Вот пример того, как может выглядеть такое заявление:

Write-Host $Style"Hello World"

Изображение 4156
Я определил стиль и использовал его вместе с командлетом Write-Host.

Одна интересная вещь, которую следует учитывать, заключается в том, что вы не ограничены такими простыми вещами, как я. Вы можете легко создать несколько разных стилей. Эти стили могут включать в себя различные цветовые схемы, жирный текст, курсив и любые другие украшения, которые вы хотите включить. Вы даже можете создать библиотеку стилей в совершенно отдельном сценарии PowerShell, а затем ссылаться на эту библиотеку из всех других сценариев, которые вы пишете. Таким образом, вы можете определить стили один раз, а затем использовать их во всех сценариях PowerShell.