[PowerShell] PSReadline 2.0が正式リリースされました

2020.02.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。
PowerShellコンソールに様々な拡張機能を提供しているPSReadlineモジュールが約2年の時を経てメジャーバージョンアップとなるVer.2.0.0になりました。

もうすぐリリースされるPowerShell 7に組み込むためのGAと予想されます。


【2020/3/5 追記】

本日PowerShell 7が正式リリースされ、PSReadline 2.0.0正式版がバンドルされていることを確認しました。

【追記ここまで】

アップデート方法

PSReadlineは個別のモジュールとして提供されているものの、かなり 特別なモジュールのためアップデート方法も一筋縄ではいきません。

いずれ公式な手順や注意事項がアナウンスされると思いますが、現時点では不用意にアップデートしない方が良いでしょう。
いまの環境で特に問題を抱えていないひとは標準で組み込まれるバージョンがリリースされるのを待つことをお勧めします。

インストール要件

PSReadline 2.0はPowerShell 5.0以降の環境にインストール可能です。
以前のVer.1.x系はPowerShell 3.0以降の環境で使えましたが、要求されるPowerShellのバージョンが上がっていますので注意してください。

Windows PowerShellの場合

PSReadlineはPowerShell 5.0(Windows 10)からシステムに標準で組み込まれており、Ver.1.1~Ver.2.0.0-betaのバージョンが最初からインストール済みです。

通常のモジュールであればInstall-Module-Forceパラメーターや-AllowClobberパラメーターを付けることで更新できるのですが、今回は独自の手段が必要となっています。
たとえば手元の環境(PSReadline 2.0.0-beta.2インストール済み)で単純にInstall-Moduleを実行しても、

Install-Module PSReadline -Scope CurrentUser -Force

警告: バージョン '2.0.0' のモジュール 'PSReadline'
は現在使用中です。アプリケーションを終了した後で、操作をやり直してください。

と既存バージョンのアンロードに失敗してしまいインストールできません。

原因としてはPSReadlineはPowerShell内部で特別扱いされており他のモジュールよりもロードされるタイミングが早いことに起因しています。

いろいろ試してみたものの、残念ながら現時点ではローカルユーザー(-Scope CurrentUser)で更新することはできない様です。
このため、コマンドプロンプトを管理者権限で起動したうえで-NonInteractiveパラメーターを付けてPowerShellを呼び出しPSReadlineのロードを回避しつつモジュールの更新を行ってやる必要があります。

REM コマンドプロンプトから 管理者権限、かつ、-NonInteractive でPowerShellを実行
powershell -NonInteractive -Command "Install-Module PSReadLine -Scope AllUsers -Force

ただ、このやり方ですとシステムに標準でインストールされているバージョンを上書きしてしまい切り戻しができなくなる場合がありますので注意してください。
(標準でVer.2.0.0-betaがインストールされている環境は切り戻し不可)

PowerShell Coreの場合

PowerShell Coreの場合も同様の手順が必要となり、コマンドプロンプトからインストールしてやる必要があります。

REM コマンドプロンプトから 管理者権限、かつ、-NonInteractive でPowerShell Coreを実行
pwsh -NonInteractive -Command "Install-Module PSReadLine -Scope AllUsers -Force

PowerShell Coreの場合は-Scope AllUsersの場合でもシステム標準でインストールされているバージョンを上書きすることがないため、以下のコマンドで切り戻しが可能です。

pwsh -NonInteractive -Command "Uninstall-Module PSReadLine -Force"

【参考情報】各OSに標準でインストールされているバージョン

以前個人ブログで書いた記事の更新版です。

Windows 10

リリース PowerShell PSReadline
Windows 10 初期リリース (1507) 5.0 1.1
Windows 10 November Update (1511) 5.0 1.1
Windows 10 Anniversary Update (1607) 5.1 1.2
Windows 10 Creators Update (1703) 5.1 1.2
Windows 10 Fall Creators Update (1709) 5.1 1.2
Windows 10 April 2018 Update (1803) 5.1 1.2
Windows 10 October 2018 Update (1809) 5.1 2.0.0-beta.2
Windows 10 May 2019 Update (1903) 5.1 2.0.0-beta.2
Windows 10 May 2019 Update (1903) 5.1 2.0.0-beta.2
Windows 10 November 2019 Update (1909) 5.1 2.0.0-beta.2

Windows Server

リリース PowerShell PSReadline
Windows Server 2016 5.1 1.2
Windows Server 2019 5.1 2.0.0-beta.2

PowerShell Core + PowerShell 7

バージョン PSReadline
6.0.x 1.2
6.1.x 2.0.0-beta.3
6.2.x 2.0.0-beta.3
7.0.0-rc.x 2.0.0-rc.2
7.0.0 2.0.0 (2020/3/5追記)

PSReadline 2.0 新機能について

PSReadline 2.0は.NET Core(PowerShell Core)対応やバグ修正に多くのリソースが割かれており目立った新機能は正直なところ少ないです。
詳細はGitHubのリリースノートを見ていただくのが良いでしょう。

バグ修正としては以前個人ブログで紹介した以下の点はこのリリースで改善されているハズです。

この他にも最近は中国からのIssueが多く報告されており、その改善は日本語入力周りにも良い影響を与えていると推測されます。

最後に

ざっとこんな感じです。

もうすぐリリースされるPowerShell 7に向けての更新ですのでPowerShell 7のリリースを待ってPowerShellごとPSReadlineも更新してしまうのが良いと思います。
既存のWindows PowerShell環境で更新する必要がある場合は切り戻しができないケースがあり得る点にだけご注意ください。