[Powershell] インストールされているモジュールが古いモジュールかどうかチェックする方法

今回は、Powershellにインストールされているモジュールが古いモジュールなのかどうか、新しいモジュールが存在するのかどうかをチェックする方法をまとめます。

インストールされているモジュールをチェックするCmdletとリポジトリ内のモジュールを検索するCmdletを組み合わせてみます。

\自身のスキルを向上するには技術書で!!/

月額¥980で技術書が読み放題!!

  • ビジネススキルとマインド向上したい!!
  • 決断や行動を先送りにしてしまう方!!

Kindle Unlimitedでは30日間無料体験実施中!登録はこちら!

インストールされているモジュールを取得するCmdlet

まずはインストールされているモジュールを下記Cmdletを利用して取得します

Get-InstalledModule
  [[-Name] <String[]>]
   [-MinimumVersion <String>]
   [-RequiredVersion <String>]
   [-MaximumVersion <String>]
   [-AllVersions]
   [-AllowPrerelease]
   [<CommonParameters>]

パラメータ説明
-Name取得するモジュールの名前を指定
-MinimumVersion取得するモジュールの最小バージョンを指定
-RequiredVersion取得するモジュールのバージョンを指定
-MaximumVersion取得するモジュールの最大バージョンを指定
-AllVersions取得モジュールの利用可能なバージョンをすべて取得する場合にして。「MinimumVersion」や「MaximumVersion」、「RequiredVersion」を同時に利用は不可
-AllowPrereleaseプレリリースとしてマークされたモジュールを含める場合に指定

Get-InstalledModule

リポジトリ内のモジュールを検索するCmdlet

次に、Find-Moduleを利用して、リポジトリ内のモジュールを検索します。

Find-Module
    [[-Name] <string[]>]
    [-MinimumVersion <string>]
    [-MaximumVersion <string>]
    [-RequiredVersion <string>]
    [-AllVersions]
    [-IncludeDependencies]
    [-Filter <string>]
    [-Tag <string[]>]
    [-Includes <string[]>]
    [-DscResource <string[]>]
    [-RoleCapability <string[]>]
    [-Command <string[]>]
    [-Proxy <uri>]
    [-ProxyCredential <pscredential>]
    [-Repository <string[]>]
    [-Credential <pscredential>]
    [-AllowPrerelease]
    [<CommonParameters>]

パラメータ説明
-Nameリポジトリ内で検索するモジュールの名前を指定
-MinimumVersion検索するモジュールの最小バージョンを指定
-MaximumVersion検索するモジュールの最大バージョンを指定
-RequiredVersion検索するモジュールのバージョンを指定
-AllVersions検索するモジュールの利用可能なバージョンをすべて取得する場合にして。「MinimumVersion」や「MaximumVersion」、「RequiredVersion」を同時に利用は不可
-IncludeDependencies指定したモジュールに依存関係があるかどうかを確認する場合に指定
-FilterFilterを利用して関連するモジュールを検索する場合に指定
-Tagタグを利用して検索する場合に指定
-Includes特定の種類の PowerShell 機能を含むモジュールを検索する場合に指定。使用できる値は「DscResource, Cmdlet, Function, RoleCapability」のみ
-DscResourceDSC リソースを含むモジュールの名前または名前の一部を指定
-RoleCapabilityロール機能の配列を指定
-Commandモジュール内で検索するコマンドの配列を指定
-Proxyインターネット リソースに直接接続するのではなく、要求のプロキシ サーバーを指定
-ProxyCredentialProxy パラメーターに指定したプロキシ サーバーを使用するアクセス許可を持つユーザー アカウントを指定
-Repositoryモジュールを検索するリポジトリを指定
-Credential指定したパッケージ プロバイダーまたはソースのモジュールをインストールする権限を持つユーザー アカウントを指定
-AllowPrereleaseプレリリースとしてマークされたモジュールを含める場合に指定

Find-Module

実装

では、現在のインストールされているモジュールが古いモジュールなのかどうかをチェックするためのスクリプトを実装してみます。

$Modules = Get-InstalledModule
$modcheck = @();
$matchedModCheck = @();

# インストールされているモジュールごとに検索をかける
foreach($mod in $Modules){
    $PSGalleryMod = Find-Module $mod.Name;
    if($PSGalleryMod.Version -ne $mod.version){
        # バージョンが異なるモジュールをセット
        $modversions = [pscustomobject]@{
            Name = $($mod.name)
            InstalledVersion = $($mod.Version);InstalledPubDate =  $($mod.PublishedDate)
            AvailableVersion =  $($PSGalleryMod.Version)
            NewPubDate =  $($PSGalleryMod.PublishedDate)
        }
        $modcheck += $modversions;
    } else {
        $modversions = [pscustomobject]@{
            Name = $($mod.name)
            InstalledVersion = $($mod.Version);InstalledPubDate =  $($mod.PublishedDate)
            AvailableVersion =  $($PSGalleryMod.Version)
            NewPubDate =  $($PSGalleryMod.PublishedDate)
        }
        $matchedModCheck += $modversions;
    }
}
# 標準出力
Write-Host "[Unmatched Version Modules]"
if ($modcheck.Count -eq 0) {
    Write-Host "Nothing"
} else {
    $modcheck | Format-Table
}

Write-Host "[Matched Version Modules]"
if ($matchedModCheck.Count -eq 0) {
    Write-Host "Nothing"
} else {
    $matchedModCheck | Format-Table
}

わかりやすいように、今回は以下の項目をオブジェクトとして用意しました。

  • Name(モジュール名)
  • InstalledVersion(インストール済みバージョン)
  • InstalledPubDate(インストールモジュールのリリース日時)
  • AvailableVersion(現行バージョン)
  • NewPubDate(現行モジュールのリリース日時)

結果は下記のようになります。

[Unmatched Version Modules]
Name             InstalledVersion InstalledPubDate     AvailableVersion NewPubDate
----             ---------------- ----------------     ---------------- ----------
AWS.Tools.Common 4.1.177          2022/09/27 21:44:13  4.1.182          2022/10/05 21/43/14

[Matched Version Modules]
Name             InstalledVersion InstalledPubDate     AvailableVersion NewPubDate        
----             ---------------- ----------------     ---------------- ----------        
newtonsoft.json  1.0.2.201        2019/05/11 4:54:09   1.0.2.201        2019/05/11 4:54:09

今回は、AWSToolsとnewtonsoft.jsonのみしか私の環境に入っていなかったのでサンプルとしては少ないですが、正しく表示されました。

最後に

このように、バージョン管理は結構大事な保守作業でもあるので是非活用してみてください

タイトルとURLをコピーしました