Найти в Дзене
inPowerShell

История команд в PowerShell

PowerShell сохраняет историю выполненных команд. Сам по себе PowerShell сохраняет введенные команды в оперативной памяти. Модуль PSReadline дополнительно сохраняет их в файле на жестком диске, что позволяет нам возвращаться к командам, введенным не только в текущей сессии, но и к тем, что были выполнены некоторое время назад и, возможно, в иной версии PowerShell. Местонахождение этого файла мы можем получить при помощи следующей команды. Get-PSReadLineOption | Select-Object HistorySavePath Просмотреть введенные ранее команды мы можем при помощи клавиш Вверх и Вниз. Первая из них перемещает нас назад по истории, вторая - в обратном направлении. При этом мы можем перемещаться по всей истории. History cmdlets В отличие от клавиш Вверх и Вниз, командлеты для работы с историей, такие как Get-History, Invoke-History и Clear-History взаимодействуют только с командами, расположенными в оперативной памяти. Таким образом, команда Get-History, или ее алиасы - h, history и ghy - в качестве результ
Оглавление

PowerShell сохраняет историю выполненных команд.

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

Местонахождение этого файла мы можем получить при помощи следующей команды.

Get-PSReadLineOption | Select-Object HistorySavePath

Просмотреть введенные ранее команды мы можем при помощи клавиш Вверх и Вниз. Первая из них перемещает нас назад по истории, вторая - в обратном направлении. При этом мы можем перемещаться по всей истории.

History cmdlets

В отличие от клавиш Вверх и Вниз, командлеты для работы с историей, такие как Get-History, Invoke-History и Clear-History взаимодействуют только с командами, расположенными в оперативной памяти.

Таким образом, команда Get-History, или ее алиасы - h, history и ghy - в качестве результата вернут только те команды, что были введены в текущей сессии. Например.

Get-History

Id Duration CommandLine
-- -------- -----------
 1    0.143 Get-Process pwsh
 2    0.018 Get-Service WinRM
 3    0.023 Get-Content C:\Windows\System32\drivers\etc\hosts

Команда Invoke-History (ее алиасы - r и ihy) позволяет выполнить некоторую сохраненную в истории команду.

Invoke-History 2

Status Name DisplayName
------ ---- -----------
Running WinRM Windows Remote Management (WS-Management)

А команда Clear-History (ее алиас - clhy) - очищает историю. Естественно, это касается исключительно истории, сохраненной в оперативной памяти, и никак не влияет на то, что было сохранено в файле.

Символ решетки

Для вызова команды из памяти мы также можем ввести символ решетки, идентификатор сохраненной команды и нажать клавишу Tab или же сочетание клавиш Ctrl+Space.

# 2 [Tab] => Get-Service WinRM

Кроме того, мы можем использовать символ # для поиска команд в истории. Например, так.

# hosts[Tab] => Get-Content C:\Windows\System32\drivers\etc\hosts

Если же указанный нами фрагмент встречается в нескольких командах, мы можем пролистать все совпадения при помощи клавиш Tab или, для движения в обратном направлении, Shift+Tab. Также для просмотра всех подходящих команд мы можем воспользоваться сочетанием клавиш Ctrl+Space.

PSReadline

Что же касается поиска по всей истории, тут у нас также есть несколько вариантов, предоставляемым модулем PSReadline.

Для поиска команд, начинающихся с введенных символов, мы можем воспользоваться клавишами F8 и, опять же, для перемещения в обратном направлении - Shift+F8.

Get[F8] => Get-Content C:\Windows\System32\drivers\etc\hosts

Для поиска по произвольному фрагменту команды мы можем воспользоваться сочетаниями клавиш Ctrl+R и Ctrl+S. Первая из них предназначена для перемещения назад по истории, вторая - в обратном направлении.

[Ctrl+R]WinRM

Ввод вышеприведенных символов позволит нам найти команду Get-Service WinRM. Для дальнейшего поиска по истории мы можем продолжать нажимать на Ctrl+R, или же, для возвращения к уже пролистанной команде - Ctrl+S.

Empowering the environment

Если мы заглянем в файл SamplePSReadLineProfile.ps1, расположенный в каталоге модуля PSReadline, то обнаружим там несколько предложений по использованию предлагаемых модулем возможностей.

Одно из таких предложений - это назначение клавишам Вверх и Вниз функций клавиш F8 и Shift+F8.

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

Если мы добавим вышеприведенные команды в профиль PowerShell, то сможем использовать клавиши Вверх и Вниз не только для перемещения по истории, как это было и раньше, но и для поиска команд, начинающихся с определенных символов.

Return

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