[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 指定したモジュールに依存関係があるかどうかを確認する場合に指定
-Filter Filterを利用して関連するモジュールを検索する場合に指定
-Tag タグを利用して検索する場合に指定
-Includes 特定の種類の PowerShell 機能を含むモジュールを検索する場合に指定。使用できる値は「DscResource, Cmdlet, Function, RoleCapability」のみ
-DscResource DSC リソースを含むモジュールの名前または名前の一部を指定
-RoleCapability ロール機能の配列を指定
-Command モジュール内で検索するコマンドの配列を指定
-Proxy インターネット リソースに直接接続するのではなく、要求のプロキシ サーバーを指定
-ProxyCredential Proxy パラメーターに指定したプロキシ サーバーを使用するアクセス許可を持つユーザー アカウントを指定
-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をコピーしました