function Uninstall-AllModules { param( [Parameter(Mandatory=$true)] [string]$TargetModule, [Parameter(Mandatory=$true)] [string]$Version, [switch]$Force, [switch]$WhatIf ) $AllModules = @() 'Creating list of dependencies...' $target = Find-Module $TargetModule -RequiredVersion $version $target.Dependencies | ForEach-Object { if ($_.PSObject.Properties.Name -contains 'requiredVersion') { $AllModules += New-Object -TypeName psobject -Property @{name=$_.name; version=$_.requiredVersion} } else { if ($_.RequiredVersion) { $candidateVersion = $_.RequiredVersion } elseif($_.MinimumVersion) { $candidateVersion = $_.MinimumVersion } else { $candidateVersion = $Version } $candidate = Get-InstalledModule $_.name -RequiredVersion $candidateVersion -ErrorAction Ignore if ($candidate) { $AllModules += New-Object -TypeName psobject -Property @{name = $_.name; version = $candidate.version} } else { $availableModules = Get-InstalledModule $_.name -AllVersions Write-Warning ("Could not find uninstall candidate for {0}:{1} - module may require manual uninstall. Available versions are: {2}" -f $_.name,$version,($availableModules.Version -join ', ')) } } } $AllModules += New-Object -TypeName psobject -Property @{name=$TargetModule; version=$Version} foreach ($module in $AllModules) { Write-Host ('Uninstalling {0} version {1}...' -f $module.name,$module.version) try { Uninstall-Module -Name $module.name -RequiredVersion $module.version -Force:$Force -ErrorAction Stop -WhatIf:$WhatIf } catch { Write-Host ("`t" + $_.Exception.Message) } } }