web-dev-qa-db-fra.com

PowerShell 5.1 - Comment désinstaller le module actuellement utilisé

Nous utilisons certains modules PowerShell dans un script PowerShell de déploiement. En utilisant la commande suivante, nous installons le module (c'est-à-dire XXXX) dans "C:\Program Files\WindowsPowerShell\Modules".

Install-Module -Name "XXXX" -AllowClobber -RequiredVersion "XXXX" -Repository "XXXX" -Scope AllUsers

Maintenant, une fois que nous avons utilisé la fonctionnalité de ce module, nous le désinstallons à la fin du script de déploiement à l'aide de la commande suivante.

Remove-Module -Name "XXXX" -force
Uninstall-Module -Name "XXXX"  -AllVersions -force

Mais cette commande de désinstallation du module donne l'erreur suivante.

WARNING: The version '###' of module 'XXXX' is currently in use. Retry the operation after closing the
applications.
PackageManagement\Uninstall-Package : Module 'XXXX' is in currently in use.
At C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:2046 char:21
+ ...        $null = PackageManagement\Uninstall-Package @PSBoundParameters
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Microsoft.Power...ninstallPackage:UninstallPackage) [Uninstall-Packag
   e], Exception
    + FullyQualifiedErrorId : ModuleIsInUse,Uninstall-Package,Microsoft.PowerShell.PackageManagement.Cmdlets.Uninstall
   Package

Quelqu'un at-il une idée pour résoudre ce problème?

15
mit

Le problème pourrait être que votre session PowerShell existante "verrouille" le module en chargeant des éléments possibles de celui-ci (tels que des variables globales ou des constantes) même si vous essayez de le décharger (Remove-Module).

Le moyen le plus propre de vous assurer qu'il n'est pas verrouillé est de quitter la session PowerShell. Si vous devez conserver la session pour faire des "trucs" par la suite, essayez de démarrer une nouvelle session PowerShell (session imbriquée) juste avant d'utiliser le module, puis quittez-le à la fin.

12
E Bekker