-
Notifications
You must be signed in to change notification settings - Fork 101
Closed
Description
Steps to reproduce
On a clean PS install, running as admin
PS C:\WINDOWS\system32> get-module PowerShellGet, PackageManagement -ListAvailable
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 1.0.0.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module, Update-Module...}
PS C:\WINDOWS\system32> install-module PackageManagement -RequiredVersion 1.4.3 -AllowClobber
PS C:\WINDOWS\system32> install-module PowerShellGet -RequiredVersion 2.2 -AllowClobber
PS C:\WINDOWS\system32> Update-Module PowerShellGet
PS C:\WINDOWS\system32> Get-Module PackageManagement,PowerShellGet -ListAvailable
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.4.4 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Script 1.4.3 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Binary 1.0.0.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Script 2.2.1 PowerShellGet {Find-Command, Find-DSCResource, Find-Module, Find-RoleCapability...}
Script 2.2 PowerShellGet {Find-Command, Find-DSCResource, Find-Module, Find-RoleCapability...}
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module, Update-Module...}Close and reopen PS as admin
PS C:\WINDOWS\system32> Import-Module PowerShellGet -Version 2.2.1
PS C:\WINDOWS\system32> Get-Module PowerShellGet, PackageManagement
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.4.4 PackageManagement {Find-Package, Find-PackageProvider, Get-Package, Get-PackageProvider...}
Script 2.2.1 PowerShellGet {Find-Command, Find-DscResource, Find-Module, Find-RoleCapability...}
PS C:\WINDOWS\system32> Get-Module PowerShellGet, PackageManagement -ListAvailable
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.4.4 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Script 1.4.3 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Binary 1.0.0.1 PackageManagement {Find-Package, Get-Package, Get-PackageProvider, Get-PackageSource...}
Script 2.2.1 PowerShellGet {Find-Command, Find-DSCResource, Find-Module, Find-RoleCapability...}
Script 2.2 PowerShellGet {Find-Command, Find-DSCResource, Find-Module, Find-RoleCapability...}
Script 1.0.0.1 PowerShellGet {Install-Module, Find-Module, Save-Module, Update-Module...}
PS C:\WINDOWS\system32> Uninstall-Module PowerShellGet -RequiredVersion 2.2
PS C:\WINDOWS\system32> Uninstall-Module PackageManagement -RequiredVersion 1.4.3
PackageManagement\Uninstall-Package : El módulo "PackageManagement" de versión "1.4.3" de la carpeta base del módulo "C:\Program
Files\WindowsPowerShell\Modules\PackageManagement\1.4.3" no se puede desinstalar debido a que uno o más módulos distintos "PowerShellGet" dependen de este módulo.
Desinstala los módulos que dependen de este antes de desinstalar el módulo "PackageManagement".
En C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\2.2.1\PSModule.psm1: 12655 Carácter: 21
+ ... $null = PackageManagement\Uninstall-Package @PSBoundParameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Package], Exception
+ FullyQualifiedErrorId : UnableToUninstallAsOtherModulesNeedThisModule,Uninstall-Package,Microsoft.PowerShell.PackageManagement.Cmdlets.UninstallPackage
Expected behavior
Module uninstalled, since there are no dependencies left (please note that PowerShellGet 2.2.1 depends on PackageManagement v1.4.4)
Actual behavior
Uninstall-Module throws an error and doesn't remove the module. -Force works though:
PS C:\WINDOWS\system32> Uninstall-Module PackageManagement -RequiredVersion 1.4.3 -Force
PS C:\WINDOWS\system32>Cause of issue is in providerfunctions/Uninstall-Package.ps1 lines 92-100
$dependentModuleScript = {
param ([string] $moduleName)
Microsoft.PowerShell.Core\Get-Module -ListAvailable |
Microsoft.PowerShell.Core\Where-Object {
($moduleName -ne $_.Name) -and (
($_.RequiredModules -and $_.RequiredModules.Name -contains $moduleName) -or
($_.NestedModules -and $_.NestedModules.Name -contains $moduleName))
}
}The dependency check should be performed not only on the RequiredModules.Name, but also on RequiredModules.Version, which should be less-than-or-equal to the version of the module being uninstalled in order to be considered a dependency.
PS C:\WINDOWS\system32> (Get-Module PowerShellGet).RequiredModules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.4.4 PackageManagement {Find-Package, Find-PackageProvider, Get-Package, Get-PackageProvider...}Environment data
> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.17763.592
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17763.592
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1