現在の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
または別のコマンドレットを使用して提供しますか?
あなたが言及する永続的な履歴は PSReadLine によって提供されます。セッションにバインドされた_Get-History
_とは別です。
履歴は、プロパティ_(Get-PSReadlineOption).HistorySavePath
_で定義されたファイルに保存されます。このファイルをGet-Content (Get-PSReadlineOption).HistorySavePath
またはテキストエディタなどで表示します。_Get-PSReadlineOption
_で関連オプションを調べます。 PSReadLineは、次を介して履歴検索も実行します ctrl+r。
提供された例を使用:
Get-Content (Get-PSReadlineOption).HistorySavePath | ? { $_ -like '*docker cp*' }
@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
私のPSプロファイルにこれがあります:
function hist { $find = $args; Write-Host "Finding in full history using {`$_ -like `"*$find*`"}"; Get-Content (Get-PSReadlineOption).HistorySavePath | ? {$_ -like "*$find*"} | Get-Unique | more }