PowerShellGet v3(PSResourceGet)の現在について – 2023年7月時点

2023.07.22

しばたです。

2019年に現在のPowerShellGetのメジャーバージョンアップとなるPowerShellGet v3に関する記事を書きました。

その後まだPowerShellGet v3はリリースされていないのですが、いろいろ変った点があるので本記事で解説してこうと思います。

PowerShellGet から PSResourceGet へ

PowerShellGet v3は定期的にベータ版が更新されており、直近ではベータ21までリリースされていました。

今年の5月末にGitHub上に以下のIssueが起票され、モジュール名をPowerShellGetからPSResourceGetに変えることになりました。

割と急な話なのですが、理由としてはPowerShell 7.4のリリース時にPowerShellGet 2系と3系の両方を同梱する都合名前を分ける必要があった様です。
別件で「Microsoft公式のPowerShellモジュールはMicrosoft.PowerShellのプレフィックスを付けるべき」という議論があり、その影響を受け「Microsoft.PowerShell.PSResourceGet」が現在の正式なモジュール名となっています。

PSResourceGetモジュールの細かい話についてはこちらの記事をご覧ください。

PowerShellへの同梱について

先述の通りPSResourceGet(Microsoft.PowerShell.PSResourceGet)は次のLTSリリースとなるPowerShell 7.4に同梱される予定です。
PowerShell 7.4では

  • PowerShellGet v2.2.5
  • Microsoft.PowerShell.PSResourceGet v3.0.x

の2つのモジュールが利用可能になり、順次PSResourceGetへ移行していく形となります。

そしてPowerShell 7.5ではCompatPowerShellGetモジュールをPowerShellGet v3として提供する予定となっています。
このCompatPowerShellGetはPowerShellGet v2と互換性のあるコマンドレットを提供するものの、実体としてはPSResourceGetを呼び出すラッパーモジュールとなります。
これにより最終的にPowerShell 7.5では

  • PowerShellGet v3.0.x (= CompatPowerShellGet) → 実体は Microsoft.PowerShell.PSResourceGet
  • Microsoft.PowerShell.PSResourceGet v3.0.x

という形になる予定です。

より細かい話はこちらの記事をご覧ください。

補足 : Windows PowerShell対応

現在Windows PowerShell環境ではPowerShellGet 1.0.0.1 *1が使われ続けていますが、将来的にはWindows PowerShell環境にもPSResourceGetを同梱しデフォルトで利用可能にしたい様です。

こちらについて現時点では具体的な日程などは決まっていません。

GitHubリポジトリ

改めて各モジュールのGitHubリポジトリを整理しておきます。

試してみた

ここからは簡単に動作確認してみます。

PSResourceGetはPowerShell 5.1以降であれば動作するので、今回は私の開発機(Windows 11)上のPowerShell 7.3.6を検証環境にします。

C:\> $PSVersionTable | Select-Object PSVersion, OS

PSVersion OS
--------- --
7.3.6     Microsoft Windows 10.0.22621

PSResouceGetはPowerShellGet v2系の環境からであればInstall-Moduleコマンドを使ってインストールします。
本日時点ではまだ正式リリース前のため-AllowPrereleaseオプションを指定してやる必要があります。

# 従来のPowerShellGetを使っている環境の場合
Install-Module -Name Microsoft.PowerShell.PSResourceGet -AllowPrerelease

既にPowerShellGet v3のベータ版を使っている場合は以下の様にInstall-PSResourceを使っても構いません。

# PowerShellGet v3ベータ版をインストール済みの場合
Install-PSResource Microsoft.PowerShell.PSResourceGet -Prerelease

本日時点ではVer.0.5.22-beta22が提供されており、Ver.0.5をベースにこれまでのベータ21を引き継ぎベータ22としている様です。

# PowerShellGet v3 ベータ21 から PSResourceGet ベータ22 に
C:\> Get-InstalledModule Microsoft.PowerShell.PSResourceGet

Version              Name                                Repository           Description
-------              ----                                ----------           -----------
0.5.22-beta22        Microsoft.PowerShell.PSResourceGet  PSGallery            PowerShell module with commands for disc…

利用可能なコマンドレットは以下の通りです。

C:\> Get-Command -Module Microsoft.PowerShell.PSResourceGet

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Find-PSResource                                    0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Get-InstalledPSResource                            0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Get-PSResourceRepository                           0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Get-PSScriptFileInfo                               0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Install-PSResource                                 0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          New-PSScriptFileInfo                               0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Publish-PSResource                                 0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Register-PSResourceRepository                      0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Save-PSResource                                    0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Set-PSResourceRepository                           0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Test-PSScriptFileInfo                              0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Uninstall-PSResource                               0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Unregister-PSResourceRepository                    0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Update-PSModuleManifest                            0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Update-PSResource                                  0.5.22     Microsoft.PowerShell.PSResourceGet
Cmdlet          Update-PSScriptFileInfo                            0.5.22     Microsoft.PowerShell.PSResourceGet

各コマンドレット自体は最初にRFCが公開された時から大きく変わっていませんでした。
当初予定されていたUpdate-PSResourceCacheが未実装だったのと公開スクリプトを取り扱うGet-PSScriptFileInfo, New-PSScriptFileInfo, Test-PSScriptFileInfo, Update-PSScriptFileInfoがPowerShellGet同様に引き継がれているのが大きく異なるところでしょうか。

あとはざっくり以下の対比でコマンドを使っていく感じになります。
コマンド毎のパラメーターにも細かい違いや新機能はあるのですが本記事では割愛します。

PowerShellGet v2 (2.2.5) PSResouceGet (0.5-beta.22) 備考
Find-Command Find-PSResource -CommandName
Find-DscResource Find-PSResource -DscResourceName
Find-Module Find-PSResource -Type Module Find-PSResource -Nameでも可
Find-RoleCapability - PSResouceGetでは意図して削除している模様
Find-Script Find-PSResource -Type Script
Get-CredsFromCredentialProvider - 代替コマンド無し : 参考
Get-InstalledModule Get-InstalledPSResource
Get-InstalledScript Get-InstalledPSResource
Get-PSRepository Get-PSResourceRepository
Install-Module Install-PSResource
Install-Script Install-PSResource
New-ScriptFileInfo New-PSScriptFileInfo
Publish-Module Publish-PSResource
Publish-Script Publish-PSResource
Register-PSRepository Register-PSResourceRepository
Save-Module Save-PSResource
Save-Script Save-PSResource
Set-PSRepository Set-PSResourceRepository
Test-ScriptFileInfo Test-PSScriptFileInfo
- Get-PSScriptFileInfo PSResouceGetのみ : 参考
Uninstall-Module Uninstall-PSResource
Uninstall-Script Uninstall-PSResource
Unregister-PSRepository Unregister-PSResourceRepository
Update-Module Update-PSResource
Update-ModuleManifest Update-PSModuleManifest
Update-Script Update-PSResource
Update-ScriptFileInfo Update-PSScriptFileInfo

簡単な例としてFind-ModuleFind-PSResourceを比較表示してみるとこんな感じです。

Find-PSResourceでは表示順が「名前」「バージョン」「プレリリース」と改善され、また新たに増えた「プレリリース」にも対応していることが見て取れます。

最後に

以上となります。

PowerShell 7.4のリリースがもう少し先(.NET 8がGAする2023年11月ごろ)なのでPSResouceGetの仕様もまだ変わるかもしれません。
大きな変化があれば改めて記事を書きたいと思います。

脚注

  1. バージョンは変わらないが微妙に内容は更新されている模様...