web-dev-qa-db-ja.com

以前のセッションからPowershellコマンド履歴を検索する方法

現在の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または別のコマンドレットを使用して提供しますか?

14
shawmanz32na

あなたが言及する永続的な履歴は PSReadLine によって提供されます。セッションにバインドされた_Get-History_とは別です。

履歴は、プロパティ_(Get-PSReadlineOption).HistorySavePath_で定義されたファイルに保存されます。このファイルをGet-Content (Get-PSReadlineOption).HistorySavePathまたはテキストエディタなどで表示します。_Get-PSReadlineOption_で関連オプションを調べます。 PSReadLineは、次を介して履歴検索も実行します ctrl+r

提供された例を使用:

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

22
jscott

簡潔な答え:

  • 押す 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
2

私のPSプロファイルにこれがあります:

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

1
Adam Wemlinger