Як шукати історію команд Powershell з попередніх сесій


16

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

Коли я забиваю ключ, я можу переглядати багато, багато команд з багатьох, багатьох сеансів, але коли я намагаюся шукати їх за допомогою 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або іншого Cmdlet?

Відповіді:


23

Постійну історію, яку ви згадуєте, надає PSReadLine . Це окремо від пов'язаного з сеансом Get-History.

Історія зберігається у файлі, визначеному властивістю (Get-PSReadlineOption).HistorySavePath. Перегляньте цей файл за Get-Content (Get-PSReadlineOption).HistorySavePathдопомогою текстового редактора тощо. Перегляньте відповідні параметри за допомогою Get-PSReadlineOption. PSReadLine також виконує пошук історії через ctrl+ r.

Використовуючи наданий приклад:

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


3

Коротка відповідь:

  • Натисніть Ctrl+, Rа потім почніть вводити текст, щоб інтерактивно шукати назад в історії. Це відповідає тексту з будь-якого місця в командному рядку. Натисніть Ctrl+ Rще раз, щоб знайти наступний збіг.
  • Ctrl+ Sпрацює як вище, але шукає в історії вперед . Ви можете використовувати Ctrl+ R/ Ctrl+, Sщоб переходити вперед і назад в результатах пошуку.
  • Введіть текст і натисніть F8. Це пошук попереднього елемента в історії, який починається з поточного вводу.
  • Shift+ 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

1
Супер корисно! Зауважте, що декілька Ctrl+Rнатискань будуть цикли через результати.
Охад Шнайдер

1

Я маю це у своєму профілі PS:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.