以前のセッションから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または別のコマンドレットをどのように検索できますか?

回答:


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が回答で述べたように、Windows 10のPowerShell 5.1以降では、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押すと結果が循環することに注意してください。
Ohad Schneider

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 }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.