Я использую текущую 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*' }
Как упомянул @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 }