tech.guitarrapc.cóm

Technical updates

Windows10 のPowerShellでF7を押しても履歴が画面に表示されない

以前書いたPowerShellの履歴に関する操作ですが、Windows 10のWindows PowerShellではF7による画面表示がされません。

tech.guitarrapc.com

これに関して少し見てみましょう。

TL;DR

PSReadLineを外すか、代替コマンドを使いましょう。 PowerShell Coreでは代替コマンド使えないのであきらめで。

Windows 10 と Windows PowerShell と PSReadline

Windows 10でもコマンドプロンプトではF7で実行履歴が見えます。

コマンドプロンプトでF7を押して実行履歴を表示する

一方でWindows 10のWindows PowerShellはF7で実行履歴が見えないのは、 PSReadlineがデフォルトで有効になったためです。 なお、もちろんPowerShell Core (6.1) でもF7で実行履歴は表示されません。

従来のようにF7で実行履歴画面を出したい

PSReadLineモジュールを外すことで表示されます。 が、今のPowerShellでPSReadlineを外すのは副作用が大きいためちょっと悩みどころです。

Remove-Module -Name PSReadLine

PSReadline モジュールを外すとF7が利用可能になる

これはWindows PowerShell / PowerShell Core両方で有効です。(そりゃぁそうですね)

PSReadline で F7を使ってGridViewによる代替表示を行う

PSReadlineは、特定のキー入力に対してハンドラーを登録できます。

例えば、F7を押すとWindows PowerShellで使えるOut-GridView表示してみましょう。

gist.github.com

この関数をWindows PowerShellで実行してからF7を押すと、実行ヒストリが最新の入力から降順にすべて表示されます。*1

Out-GridView を使った代替表示

なお、関数の$history | Sort-Object -Descending | Out-GridView -Title History -PassThru$history | Out-GridView -Title History -PassThruにすると古い履歴から昇順になります。 好きなほうでどうぞ。

PowerShell Coreは、マルチプラットフォームで表示するViewに相当するコマンドレットがないのでいったんなしで。

Ref

基本的にここの通りです。

Making the Command-History Pop-Up work via F7 in Windows 10 Powershell - Stack Overflow

*1:ここ最近Vue.jsばかりやっているのがばれる....