Назад | Перейти на главную страницу

Как искать в истории команд Powershell из предыдущих сессий

Я использую текущую Windows 10 с Powershell 5.1. Часто мне нужно найти команды, которые я использовал в прошлом, чтобы изменить и / или повторно запустить их. Неизбежно, что команды, которые я ищу, выполнялись в предыдущем или другом окне / сеансе PowerShell.

Когда я забиваю key, я могу просматривать многие-многие команды из многих-многих сеансов, но когда я пытаюсь выполнить поиск по ним, используя Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}, Я не получаю результатов. Устранение основных неисправностей показывает, что Get-History не показывает ничего из предыдущих сеансов, как показано:

C:\Users\Me> Get-History

  Id CommandLine
  -- -----------
   1 Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}

Как я могу найти предыдущие команды, ключ обеспечивает использование Get-History или другой командлет?

Упомянутая вами постоянная история предоставляется PSReadLine. Он отделен от привязки к сеансу Get-History.

История хранится в файле, определяемом свойством (Get-PSReadlineOption).HistorySavePath. Просмотреть этот файл с помощью Get-Content (Get-PSReadlineOption).HistorySavePath, или текстовый редактор и т. д. Проверьте связанные параметры с помощью Get-PSReadlineOption. PSReadLine также выполняет поиск в истории через ctrl+р.

Используя предоставленный вами пример:

Get-Content (Get-PSReadlineOption).HistorySavePath | ? { $_ -like '*docker cp*' }

Короткий ответ:

  • Нажмите Ctrl+р а затем начните вводить, чтобы искать в обратном направлении в истории в интерактивном режиме. Это соответствует тексту из любой точки командной строки. Нажмите Ctrl+р снова, чтобы найти следующее совпадение.
  • Ctrl+S работает, как указано выше, но поиски вперед в истории. Ты можешь использовать Ctrl+р/Ctrl+S для перехода вперед и назад в результатах поиска.
  • Введите текст и нажмите F8. Это ищет предыдущий элемент в истории, который начинается с текущего ввода.
  • сдвиг+F8 работает как F8, но ищет вперед.

Длинный ответ:

Как упомянул @jscott в своем ответе, PowerShell 5.1 или выше в Windows 10 использует PSReadLine модуль для поддержки среды редактирования команд. Полное сопоставление клавиш этого модуля можно получить, используя Get-PSReadLineKeyHandler командлет. Чтобы просмотреть все сопоставления клавиш, связанные с историей, используйте следующую команду:

Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}

и вот результат:

History functions
=================
Key       Function              Description
---       --------              -----------
Alt+F7    ClearHistory          Remove all items from the command line history (not PowerShell history)
Ctrl+s    ForwardSearchHistory  Search history forward interactively
F8        HistorySearchBackward Search for the previous item in the history that starts with the current input - like
                                PreviousHistory if the input is empty
Shift+F8  HistorySearchForward  Search for the next item in the history that starts with the current input - like
                                NextHistory if the input is empty
DownArrow NextHistory           Replace the input with the next item in the history
UpArrow   PreviousHistory       Replace the input with the previous item in the history
Ctrl+r    ReverseSearchHistory  Search history backwards interactively

У меня в профиле PS есть следующее:

function hist { $find = $args; Write-Host "Finding in full history using {`$_ -like `"*$find*`"}"; Get-Content (Get-PSReadlineOption).HistorySavePath | ? {$_ -like "*$find*"} | Get-Unique | more }