Заметки о Windows и других программных продуктах Microsoft...

Расширение возможностей консоли PowerShell с помощью PSReadLine

Расширение возможностей консоли PowerShell с помощью PSReadLine

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

Данные о модуле можно вывести командой:

Get-Module PSReadLine | fl

свойства модуля psreadline

Функционал

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

подсветка синтаксиса

 

Также в модуле есть механизм автозавершения. Для примера вводим команду Get-Process и нажимаем  Ctrl+Space, затем перемещаясь с помощью стрелки выбираем нужный вариант из меню и жмем Enter. Очень удобно, особенно если не помнишь точные названия параметров.

помощь в выборе параметров

 

При необходимости ввода многострочной команды можно воспользоваться сочетанием клавиш Shift+Enter, которое открывает новую строку для продолжения ввода команды. Что примечательно, здесь можно свободно перемещаться между строками и редактировать текст, находящийся на разных строках.

перенос строки

 

Отдельно стоит упомянуть об истории команд. Вообще в PowerShell есть своя история команд, однако PSReadLine ведет свою, по которой очень удобно осуществлять поиск. Поиск осуществляется с помощью сочетания клавиш Ctrl+R (поиск назад) и Ctrl+S (поиск вперед). Для поиска надо просто набрать нужное сочетание клавиш и в строке поиска ввести часть команды.

поиск по истории команд

 

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

сохраненная история команд

Настройка

Большинство функций в PSReadLine могут настраиваться. Для примера выведем список параметров, отвечающих за историю команд:

Get-PSReadlineOption | fl *history*

Теперь возьмем параметр HystoryNoDuplicates, отвечающий за исключение дублирующих команд из истории. По умолчанию он выключен. Включим его командой:

Set-PSReadlineOption -HistoryNoDuplicates

изменение настроек модуля

 

Сочетания клавиш также могут быть настроены под себя. Посмотреть текущие сочетания можно командой Get-PSReadlineKeyHandler,

сочетания клавиш

 

а изменить — Set-PSReadlineKeyHandler. Для примера назначим на Ctrl+Q переход в начало , а на Ctrl+W — переход в конец истории команд:

Set-PSReadlineKeyHandler -Key ^Q -Function BeginningOfHistory
Set-PSReadlineKeyHandler -Key ^W -Function EndOfHistory

Теперь нажимаем Ctrl+Q и получаем самую первую из введенных команд.

настройка сочетаний клавиш

Установка

В Windows 10 модуль PSReadLine входит в состав системы, для других ОС его надо устанавливать отдельно. Сделать это можно несколькими разными способами. Наиболее удобный способ — это установка из репозитория PowerShell с помощью модуля PowerShellGet (ранее известного как OneGet). PowerShellGet входит в состав PowerShell v5 и Windows Management Framework 5, а для более ранних версий PowerShell (v3 и v4) может быть загружен и установлен отдельно.

PowerShellGet позволяет загрузить и установить модуль одной простой командой Install-Module PSReadLine. Кроме того, с помощью команды Update-Module можно обновлять модуль до новой версии.

Как вариант, PSReadLine можно установить из GitHub, с помощью стороннего модуля PsGet или вручную загрузив и распаковав его в папку с остальными модулями. Но, как заявляет автор модуля, это нерекомендуемый способ, поскольку в GitHub модуль обновляться не будет, а в перспективе может быть совсем оттуда удален.

 
 
Комментарии

Опечатка history вместо hystory

Спасибо за статью!

Ошибочка вышла 🙂
Поправил.

в какой файл сохраняется история команд, так и не понял?

%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_Hystory.txt

%userprofile%\AppData\roaming\psreadline\ConsoleHost_history.txt — у меня.