I needed to use new functionality in the Az.Compute module so I updated it to the last version
Update-Module Az.Compute
But then my script started failing with this error: "Method 'get_SerializationSettings' does not have an implementation." This article suggested to downgrade the version of the Az.Accounts module to 2.12.1. That got me thinking how many modules will be affected by the downgrade of Az.Accounts?
You can find the answer by finding the dependencies of the modules using Find-Module. For example for the Az.Compute the current version at the time of writing this post is 6.3.0 and it has a dependency on Az.Accounts 2.13.0
Find-Module -Name Az.Compute Version Name Repository Description ------- ---- ---------- ----------- 6.3.0 Az.Compute PSGallery Microsoft Azure PowerShell... $r = Find-Module -Name Az.Compute $r.Dependencies Name Value ---- ----- Name Az.Accounts MinimumVersion 2.13.0 CanonicalId powershellget:Az.Accounts/2.13.0#https://www...
To find all the modules that have a dependency on Az.Accounts 2.12.1 you can use the same cmdlet Find-Module to first get a list of all modules that start with Az, then for each module ($module) get all the versions, next for each module version ($module2), check each dependency ($dep) if it matches the name and version you are looking for (Az.Accounts and 2.12.1), then show the the respective info. The variable $found is used as short circuit flag to break the loop once a match is found
$depName = 'Az.Accounts' $depVersion = '2.12.1' $modules = Find-Module -Name 'az.*' | Where-Object {$_.Name -ne $refName} | Sort-Object -Property Name foreach ($module in $modules) { $modules2 = Find-Module -Name $module.Name -AllVersions $found = $false foreach ($module2 in $modules2){ foreach ($dep in $module2.Dependencies){ if ($dep.Name -eq $depName -and $dep.MinimumVersion -eq $depVersion){ [pscustomobject]@{ ModuleName = $module2.Name ModuleVersion = $module2.Version DependencyName = $depName DependencyVersion = $depVersion } $found = $true break } else { $found = $false } } if ($found) { break } } } ModuleName ModuleVersion DependencyName DependencyVersion ---------- ------------- -------------- ----------------- Az.Aks 5.3.2 Az.Accounts 2.12.1 Az.ArcResourceBridge 0.1.0 Az.Accounts 2.12.1 Az.Batch 3.4.0 Az.Accounts 2.12.1 Az.Billing 2.0.1 Az.Accounts 2.12.1 Az.CognitiveServices 1.13.1 Az.Accounts 2.12.1 Az.Compute 5.7.0 Az.Accounts 2.12.1 Az.ContainerRegistry 3.0.3 Az.Accounts 2.12.1 Az.CosmosDB 1.10.0 Az.Accounts 2.12.1 Az.CostManagement 0.3.1 Az.Accounts 2.12.1 Az.DataProtection 1.2.0 Az.Accounts 2.12.1 Az.EventGrid 1.6.0 Az.Accounts 2.12.1 Az.EventHub 3.2.3 Az.Accounts 2.12.1 Az.Kusto 2.2.0 Az.Accounts 2.12.1 Az.Network 5.6.0 Az.Accounts 2.12.1 Az.Reservations 0.12.0 Az.Accounts 2.12.1 Az.Resources 6.6.0 Az.Accounts 2.12.1 Az.Search 0.9.0 Az.Accounts 2.12.1 Az.ServiceBus 2.2.1 Az.Accounts 2.12.1 Az.Sql 4.5.0 Az.Accounts 2.12.1 Az.SqlVirtualMachine 1.1.1 Az.Accounts 2.12.1 Az.Storage 5.5.0 Az.Accounts 2.12.1 Az.Websites 2.14.0 Az.Accounts 2.12.1 Az.Workloads 0.1.0 Az.Accounts 2.12.1
From the output you can see that in our example to use Az.Accounts 2.12.1 you require Az.Compute 5.6.0 instead of 6.3.0. Fortunately, Az.Compute 5.6.0 still had the new functionality I was looking. Thus, reinstalling the correct versions fixed the issue.
Uninstall-Module Az.Accounts -RequiredVersion 2.13.0 Install-Module Az.Accounts -RequiredVersion 2.12.1 Uninstall-Module Az.Compute -RequiredVersion 6.3.0 Install-Module Az.Compute -RequiredVersion 5.6.0