今回は、Powershellにインストールされているモジュールが古いモジュールなのかどうか、新しいモジュールが存在するのかどうかをチェックする方法をまとめます。
インストールされているモジュールをチェックするCmdletとリポジトリ内のモジュールを検索するCmdletを組み合わせてみます。
\自身のスキルを向上するには技術書で!!/
月額¥980で技術書が読み放題!!
- ビジネススキルとマインド向上したい!!
- 決断や行動を先送りにしてしまう方!!
インストールされているモジュールを取得するCmdlet
まずはインストールされているモジュールを下記Cmdletを利用して取得します
Get-InstalledModule
[[-Name] <String[]>]
[-MinimumVersion <String>]
[-RequiredVersion <String>]
[-MaximumVersion <String>]
[-AllVersions]
[-AllowPrerelease]
[<CommonParameters>]
パラメータ | 説明 |
---|---|
-Name | 取得するモジュールの名前を指定 |
-MinimumVersion | 取得するモジュールの最小バージョンを指定 |
-RequiredVersion | 取得するモジュールのバージョンを指定 |
-MaximumVersion | 取得するモジュールの最大バージョンを指定 |
-AllVersions | 取得モジュールの利用可能なバージョンをすべて取得する場合にして。「MinimumVersion」や「MaximumVersion」、「RequiredVersion」を同時に利用は不可 |
-AllowPrerelease | プレリリースとしてマークされたモジュールを含める場合に指定 |
リポジトリ内のモジュールを検索する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 | プレリリースとしてマークされたモジュールを含める場合に指定 |
実装
では、現在のインストールされているモジュールが古いモジュールなのかどうかをチェックするためのスクリプトを実装してみます。
$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のみしか私の環境に入っていなかったのでサンプルとしては少ないですが、正しく表示されました。
最後に
このように、バージョン管理は結構大事な保守作業でもあるので是非活用してみてください