Az.StackHCIモジュールのバージョン違いによる挙動なのか否か での気付き(凡ミスを繰り返したくない)をもとに、メンテナンスを簡素化することとしました。
元ネタは、Uninstall older versions of PowerShell after successful upgrade に記載がある古いPowerShellモジュールを削除するスクリプトです。
こちらをもとに、Update-Moduleをコードに追加、更新および古いモジュールを削除する対象としてAz.StackHCI、Az.ccounts、Az.Resourcesを指定した下記を作成しました。
※後ほどこの並びだとダメだと、スクリプトの動作確認で判明します。。。
太字部分が追加や変更したコードです。
$modules = @("Az.StackHCI", "Az.Accounts", "Az.Resources")
foreach($module in $modules)
{
$current = Get-InstalledModule -Name $module -ErrorAction Ignore
if (-not $current)
{
Write-Host $("[Module: $module] Is not installed, skipping")
continue
} else {
update-module -Name $module -Force
}
Write-Host $("[Module: $module] Newest installed version is $($current.Version)")
$versions = Get-InstalledModule -Name $module -AllVersions
foreach($version in $versions)
{
if ($version.Version -eq $current.Version)
{
Write-Host $("[Module: $module] Skipping uninstall for version $($version.Version)")
continue
}
Write-Host $("[Module: $module] Uninstalling version $($version.Version)")
$version | Uninstall-Module -Force -Confirm:$false
}
}
スクリプト実行後は、下記の通りとなりました。Az.Resourcesのスペルミスを修正したので、2回実行しました。Az.Resourcesがデグレードしているので、まだ改良が必要かなぁ。。。
依存関係の関係で、"Az.StackHCI", "Az.Resources", "Az.Accounts"の順で処理しないとだめでした。あと"Az.Accounts"は、"Az.StackHCI"の依存関係に伴いインストールされますね。
でも、別環境では、下記の通り新しいバージョンを削除しているので、改良が必要です。。。
ということで現時点のコードを下記に貼っておきます。(上記の改良はまだ未反映)
$modules = @("Az.StackHCI", "Az.Resources", "Az.Accounts")
foreach($module in $modules)
{
$current = Get-InstalledModule -Name $module -ErrorAction Ignore
if (-not $current)
{
Write-Host $("[Module: $module] Is not installed, skipping")
continue
} else {
update-module -Name $module -Force
}
Write-Host $("[Module: $module] Newest installed version is $($current.Version)")
$versions = Get-InstalledModule -Name $module -AllVersions
foreach($version in $versions)
{
if ($version.Version -eq $current.Version)
{
Write-Host $("[Module: $module] Skipping uninstall for version $($version.Version)")
continue
}
Write-Host $("[Module: $module] Uninstalling version $($version.Version)")
$version | Uninstall-Module -Force -Confirm:$false
}
}