[REX] Erreur lors de l’import d’un module : gérer les versions multiples

par | Jan 29, 2026 | PowerShell | 0 commentaires

PowerShell repose largement sur des modules pour étendre ses fonctionnalités, que ce soit pour l’administration système, la gestion Microsoft 365 ou des scripts internes. Dans de nombreux environnements, il arrive qu’un même module soit présent en plusieurs versions sur la machine, ce qui peut générer des conflits lors de l’import dans un script.

Ce problème se manifeste souvent lorsque l’on écrit ou exécute des scripts sur différentes machines ou environnements, par exemple :

  • un script utilisant Exchange Online ou Microsoft.Graph sur des serveurs différents
  • plusieurs versions d’un module interne développé en interne pour automatiser l’inventaire ou la configuration
  • des mises à jour partielles qui laissent des versions anciennes et nouvelles sur la machine

Dans ces cas, l’exécution d’un Import-Module peut échouer ou charger la mauvaise version, entraînant des erreurs inattendues ou des comportements incompatibles.

Exemples typiques :

  • Import-Module : Module 'PnP.PowerShell' is already loaded.
  • Des cmdlets manquantes ou modifiées entre versions
  • Conflits de dépendances entre modules
  • Scripts fonctionnant en test mais échouant en production

Ces erreurs surviennent car PowerShell charge par défaut la première version trouvée dans le $env:PSModulePath, sans vérifier la compatibilité de version avec le script.

La gestion des versions de module est un élément souvent sous-estimé :

  • Chaque version peut contenir des cmdlets différentes, ou modifier le comportement existant
  • Certains modules ne supportent pas la cohabitation de plusieurs versions dans la même session
  • Les scripts automatisés peuvent être sensibles à la version exacte pour des raisons de compatibilité ou de sécurité

Solutions et bonnes pratiques

  1. Spécifier la version souhaitée lors de l’import

Pour éviter les conflits, utilisez -RequiredVersion pour charger exactement la version nécessaire :

Import-Module -Name PnP.PowerShell -RequiredVersion 1.12.0

Si le script peut tolérer plusieurs versions récentes, utilisez -MinimumVersion et/ou -MaximumVersion pour définir une plage compatible :

Import-Module -Name PnP.PowerShell -MinimumVersion 1.10.0 -MaximumVersion 1.12.0
  1. Vérifier les versions installées avant import
Get-InstalledModule -Name PnP.PowerShell -AllVersions

Cela permet d’identifier les versions présentes et de planifier une mise à jour ou un nettoyage si nécessaire.

  1. Forcer le rechargement si un module est déjà chargé

Lorsque PowerShell détecte une version chargée, certaines cmdlets peuvent provoquer des erreurs. -Force permet de recharger la version spécifiée :

Import-Module -Name PnP.PowerShell -RequiredVersion 1.12.0 -Force
  1. Importer via le chemin complet du module

Pour un contrôle absolu et éviter tout conflit avec d’autres versions présentes dans $env:PSModulePath :

Import-Module "C:\Program Files\WindowsPowerShell\Modules\PnP.PowerShell\1.12.0\PnP.PowerShell.psd1"
  1. Limiter le scope de l’import

En utilisant -Scope CurrentUser ou -Scope LocalSession, on peut isoler le module à la session ou à l’utilisateur, réduisant les conflits avec d’autres scripts ou administrateurs :

Import-Module -Name PnP.PowerShell -RequiredVersion 1.12.0 -Scope CurrentUser

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *