Поиск по сайту:

Использование PSReadLine в PowerShell


PSReadLine — один из тех модулей, которые могут не сразу показать свою полезность до регулярного использования. Если вы часто используете командную строку PowerShell, PSReadLine может значительно облегчить вам жизнь. PSReadLine, включенный в версии PowerShell еще в Windows PowerShell 5, продолжает добавлять новые функции и утилиты. Основываясь на почтенном наследии GNU Readline в мире Unix, PSReadLine добавляет дополнительные функции командной строки PowerShell, такие как многострочное редактирование, выделение синтаксиса, прогнозирующий IntelliSense, расширенная поддержка истории и альтернативные режимы редактирования.

Обновление и загрузка PSReadLine

Большинство относительно последних версий PowerShell имеют встроенную версию PSReadLine. Включенный еще в Windows PowerShell 5.0, каждая последующая версия добавляла более новую версию с PowerShell 7.1, включая PSReadLine 2.1. Конечно, вы можете воспользоваться новыми функциями старых версий PowerShell. Если PSReadLine еще не импортирован, используйте Import-Module PSReadLine, чтобы сразу начать использовать функции. Чтобы убедиться, что вы используете последнюю версию, читайте дальше!

Начиная с PowerShell 7.0, PowerShell пропускает автоматическую загрузку PSReadLine в Windows при обнаружении программы чтения с экрана. В настоящее время PSReadLine плохо работает с программами чтения с экрана. Отрисовка и форматирование PowerShell 7.0 по умолчанию в Windows работают правильно. При необходимости вы можете загрузить модуль вручную.

Windows PowerShell 5.x

Обычно обновление PSReadLine с помощью Windows PowerShell 5.0 или 5.1 выполняется в два этапа. Во-первых, вам нужно убедиться, что вы используете PowerShellGet версии 1.6.0 или выше. Для этого вам нужно выполнить следующую команду в сеансе Windows PowerShell с повышенными привилегиями.

Install-Module -Name PowerShellGet -Force

Затем убедитесь, что все сеансы PowerShell закрыты, и в командной строке cmd.exe с повышенными привилегиями запустите следующий код. Причина, по которой это запускается из cmd.exe, заключается в том, что по умолчанию PSReadLine загружается и не может быть обновлен, если находится в памяти.

powershell -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"

PowerShell 6.x Core и PowerShell 7

Чтобы обновить PSReadLine в более новых версиях PowerShell, вы можете выполнить аналогичную операцию, закрыв все открытые сеансы PowerShell, pwsh.exe и запустив сеанс cmd.exe с повышенными привилегиями с помощью следующий код.

pwsh.exe -noprofile -command "Install-Module PSReadLine -Force -SkipPublisherCheck -AllowPrerelease"

Обновление установленной галереи PowerShell PSReadLine

Возможно, вы установили PSReadLine из галереи PowerShell, и если вы это сделали, вы можете выполнить любую из следующих команд для обновления в зависимости от того, используете ли вы Windows PowerShell или PowerShell Core/7.

# Windows PowerShell
powershell -noprofile -command "Update-Module PSReadLine -AllowPrerelease"

# PowerShell Core/7
pwsh.exe -noprofile -command "Update-Module PSReadLine -AllowPrerelease"

Особенности PSReadLine

Что мы можем сделать с PSReadLine? Существует ряд очень интересных функций, которые могут помочь вам в работе с командной строкой. Ниже вы увидите, как некоторые функции работают на практике.

Окрашивание синтаксиса

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

Хотя эта командная строка не очень длинная, бывают случаи, когда разделить ее на несколько строк было бы намного проще. Читайте дальше, чтобы увидеть, как мы можем разделить это на несколько строк, как в традиционном редакторе кода.

Многострочное редактирование

Взяв тот же набор команд выше, как нам разделить его на несколько строк? Используя комбинацию клавиш по умолчанию Shift-Enter (в Windows), мы можем разделить строки, как это обозначено >>.

Вы можете использовать клавиши со стрелками для перемещения по тексту, и только когда вы будете готовы запустить команду, вы можете нажать клавишу Enter для ее выполнения. Что делать, если вы не уверены, какую команду использовать? Predictive Intellisense спешит на помощь!

Прогнозный интеллект

Во-первых, нам нужно включить Predictive IntelliSense. Вы можете сказать ему использовать разные типы источников, но наиболее распространенным является просто ваша история. Имейте в виду, что пока у вас не будет файла истории с созданным содержимым, это может быть не самым полезным, но через некоторое время это становится удобным.

# This will enable the prediction source for IntelliSense
Set-PSReadLineOption -PredictionSource 'History'
# (Optional) Change the darker grey to a lighter grey to account for dark backgrounds
Set-PSReadLineOption -Colors @{ InlinePrediction = '#9CA3AF'}

Теперь мы можем проверить это, используя ту же команду, которую мы только что запустили. Вы можете видеть, что после простого ввода Get мы уже видим предлагаемую для завершения команду. Вы можете использовать стрелку вправо (по умолчанию), чтобы принять выбор.

Файл истории PSReadLine

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

  • Windows$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine
  • Linux$env:XDG_DATA_HOME/powershell/PSReadLine или $env:HOME/.local/share/powershell/PSReadLine

Будьте внимательны! При использовании таких командлетов, как ConvertTo-SecureString, пароли могут сохраняться в файле истории.

Заключение

PSReadLine — очень полезный модуль для улучшения работы с командной строкой. Благодаря многострочному редактированию, подсветке синтаксиса и недавнему добавлению Predictive IntelliSense это незаменимое дополнение к любому набору инструментов системного администратора!