しばたテックブログ

PowerShellを中心に気分で書いている技術ブログです。

PowerShellGetをアップデートしよう

PowerShell Advent Calendar 2017、18日目です。

qiita.com

PowerShell 5.0以降、Windows 10やWindows Server 2016では標準でインストール済みのPowerShellGetの機能について、現時点での最新バージョンはVer.1.6.0なのですが、例えばWindows 10においてはFall Creator Update(1709)を適用してもVer.1.0.0.1と古いバージョンのまま更新されません。

www.powershellgallery.com

PowerShellGetの変更履歴はこちらあり、これまでいくつかのバグフィックスや機能追加がなされています。
例えば最新版のVer.1.6.0ではプレリリースバージョンのモジュールのインストールに対応する様になっています。

一般論としてできるだけ新しいバージョンのモジュールを利用していくのが良いため、本エントリではその手順を紹介していきます。

PowerShellGetをアップデートする

本エントリではWindows 10 Fall Creators Update(1709)を検証環境として説明します。

はじめに更新前のバージョンをチェックしてみます。
PowerShellGetは内部でPackageManagementモジュールを使用するのでこちらのバージョンも確認しておきます。

Get-Module PowerShellGet,PackageManagement -ListAvailable

f:id:stknohg:20171218001908p:plain

どちらのモジュールもVer.1.0.0.1と古いままです。

通常、モジュールのアップデートにはUpdate-Moduleコマンドレットを使いますが、何も考えずに実行すると以下のエラーメッセージが出てしまいます。

Update-Module PowerShellGet 

f:id:stknohg:20171218002004p:plain

このためInstall-Moduleコマンドレットを使い新しいバージョンを別にインストールする体をとる必要があります。
Install-Moduleコマンドレットですが、インストールするモジュールを過去バージョンと併用するには-Forceオプションが必要です。
また既存コマンドの動作を上書き許可するため-AllowClobberオプションも必要になります。

Install-Module PowerShellGet -Scope CurrentUser -Force -AllowClobber 

インストール後はこんな感じになります。

f:id:stknohg:20171218002024p:plain

  • PowerShellGet : Ver.1.6.0
  • PackageManagement : Ver.1.1.7

と、両モジュールとも新しいバージョンが追加インストールされていることが分かります。

コンソールを再起動すると新しいバージョンのモジュールが読み込まれ利用可能になります。

PowerShellGetの新機能を試してみる

最初に新しいバージョンのPowerShellGetでは

プレリリースバージョンのモジュールのインストールに対応する

と説明しました。

ちょうど今PowerShellコンソールに様々な拡張機能を提供しているPSReadlineモジュールがVer.2.0 ベータをプレリリース版として公開しているので試しにインストールしてみます。

PSReadline 2.0は1.x系に対して主にPowerShell Coreへの対応とバグフィックスが主な変更点ですが、

  • 日本語入力時にキャレット位置が狂うバグの修正(#542)
  • 行頭でバックスペースキーを押したときにBeep音がならない様に修正 (#422)

などの日本語ユーザーにとっても嬉しい修正が入っているので積極的に試してみると良いと思います。

PSReadline 2.0 Betaをインストールしてみる

プレリリース版のモジュールを取り扱うには新たに追加された-AllowPrereleaseオプションを指定してやります。

モジュールを検索する場合にはFind-Module-AllowPrereleaseオプションを指定します。

Find-Module PSReadline -AllowPrerelease 

f:id:stknohg:20171218002156p:plain

-AllowPrereleaseを付けたときだけプレリリース版であるVer.2.0.0-beta1がヒットするのが見て取れます。

続けて、プレリリース版のモジュールをインストールするにはInstall-Module-AllowPrereleaseオプションを指定してやります。
過去バージョンのモジュールと併用するには-Forceオプションが必要です。
また、既存のバージョン(ここではVer.1.2)が署名済みのため、Ver.2.0でも署名を求められており、いまのところは-SkipPublisherCheckを付けてやる必要があります。

Install-Module PSReadline -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck

f:id:stknohg:20171218002355p:plain

エラー無く処理が終わればインストール完了です。
コンソールを再起動すると新しいバージョンのモジュールが読み込まれます。

補足 システム全体へのインストール

ここまでの手順では各コマンドを-Scope CurrentUserで実行してユーザー毎のインストールを行いましたが、もちろん管理者としてシステムワイドにインストールしても構いません。

この場合は-AllowClobberオプションは不要になります。

Install-Module PowerShellGet -Force

f:id:stknohg:20171218002432p:plain

コンソールを再起動すると新しいバージョンのモジュールが読み込まれます。

同様にPSReadlineも管理者としてインストール可能です。

Install-Module PSReadline -AllowPrerelease -Force -SkipPublisherCheck

f:id:stknohg:20171218002452p:plain