So durchsuchen Sie den Powershell-Befehlsverlauf aus früheren Sitzungen

14

Ich verwende aktuelles Windows 10 mit Powershell 5.1. Oft möchte ich Befehle nachschlagen, die ich in der Vergangenheit verwendet habe, um sie zu ändern und / oder erneut auszuführen. Die gesuchten Befehle wurden zwangsläufig in einem vorherigen oder einem anderen PowerShell-Fenster / einer anderen PowerShell-Sitzung ausgeführt.

Wenn ich den Schlüssel drücke, kann ich viele, viele Befehle aus vielen, vielen Sitzungen durchsuchen, aber wenn ich versuche, sie mit zu durchsuchen Get-History | Where-Object {$_.CommandLine -Like "*docker cp*"}, erhalte ich keine Ergebnisse. Die grundlegende Fehlerbehebung zeigt, dass Get-Historynichts aus früheren Sitzungen angezeigt wird, wie folgt:

C:\Users\Me> Get-History

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

Wie kann ich die vorherigen Befehle durchsuchen, die der Schlüssel mit Get-Historyeinem anderen Cmdlet bereitstellt?

shawmanz32na
quelle

Antworten:

21

Der von Ihnen erwähnte persistente Verlauf wird von PSReadLine bereitgestellt . Es ist von der sitzungsgebundenen getrennt Get-History.

Der Verlauf wird in einer von der Eigenschaft definierten Datei gespeichert (Get-PSReadlineOption).HistorySavePath. Get-Content (Get-PSReadlineOption).HistorySavePathZeigen Sie diese Datei mit oder einem Texteditor usw. an. Überprüfen Sie die zugehörigen Optionen mit Get-PSReadlineOption. PSReadLine führt auch Verlaufssuchen über ctrl+ durch r.

Verwenden Sie Ihr Beispiel:

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

jscott
quelle
2

Kurze Antwort:

  • Drücken Sie Ctrl+ Rund beginnen Sie dann mit der Eingabe, um interaktiv im Verlauf rückwärts zu suchen . Dies entspricht dem Text von einer beliebigen Stelle in der Befehlszeile. Drücken Sie erneut Ctrl+ R, um die nächste Übereinstimmung zu finden.
  • Ctrl+ Sfunktioniert wie oben, sucht aber in der Geschichte nach vorne . Sie können Ctrl+ R/ Ctrl+ verwenden S, um in den Suchergebnissen hin und her zu gehen.
  • Geben Sie einen Text ein und drücken Sie dann F8. Dadurch wird nach dem vorherigen Element im Verlauf gesucht, das mit der aktuellen Eingabe beginnt.
  • Shift+ F8funktioniert wie F8, sucht aber vorwärts.

Lange Antwort:

Wie in seiner Antwort erwähnt, verwendet PowerShell 5.1 oder höher in Windows 10 das PSReadLineModul zur Unterstützung der Befehlsbearbeitungsumgebung. Die vollständige Schlüsselzuordnung dieses Moduls kann mithilfe des Get-PSReadLineKeyHandlerCmdlets abgerufen werden . Verwenden Sie den folgenden Befehl, um alle Schlüsselzuordnungen zum Verlauf anzuzeigen:

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

und hier ist die Ausgabe:

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
Mohammad Dehghan
quelle
1
Super nützlich! Beachten Sie, dass mehrere Ctrl+RDruckvorgänge die Ergebnisse durchlaufen.
Ohad Schneider
1

Ich habe dies in meinem PS-Profil:

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

Adam Wemlinger
quelle