about_PSModulePath
Description courte
Cet article décrit l’objectif et l’utilisation de la variable d’environnement $env:PSModulePath
.
Description longue
La $env:PSModulePath
variable d’environnement contient une liste d’emplacements de dossiers. PowerShell recherche de manière récursive chaque dossier pour les fichiers de module (.psd1
ou .psm1
) de manière récursive.
Par défaut, les emplacements effectifs auxquels ils sont affectés $env:PSModulePath
sont les suivants :
- Les modules installés dans l’étendue CurrentUser sont stockés dans
$HOME\Documents\WindowsPowerShell\Modules
. - Les modules installés dans l’étendue AllUsers sont stockés dans
$env:ProgramFiles\WindowsPowerShell\Modules
. - Modules fournis avec Windows PowerShell stockés dans , c’est-à-dire
$PSHOME\Modules
$env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
.
Construction de PowerShell PSModulePath
La valeur de celle-ci $env:PSModulePath
est construite chaque fois que PowerShell démarre.
La valeur varie selon la version de PowerShell et la façon dont vous l’avez lancée.
Démarrage de Windows PowerShell
Windows PowerShell utilise la logique suivante pour construire le PSModulePath
démarrage :
- S’il
PSModulePath
n’existe pas, combinez CurrentUser, AllUsers et les chemins d’accès aux$PSHOME
modules - S’il
PSModulePath
existe :- Si
PSModulePath
contient le$PSHOME
chemin des modules :- Le chemin des modules AllUsers est inséré avant
$PSHOME
le chemin des modules
- Le chemin des modules AllUsers est inséré avant
- autre:
- Il suffit d’utiliser
PSModulePath
comme défini puisque l’utilisateur a délibérément supprimé l’emplacement$PSHOME
- Il suffit d’utiliser
- Si
Le chemin du module CurrentUser est préfixé uniquement si l’étendue $env:PSModulePath
utilisateur n’existe pas. Sinon, l’étendue $env:PSModulePath
utilisateur est utilisée comme défini.
Comportement de recherche de module
PowerShell recherche de manière récursive chaque dossier dans les fichiers de module (.psd1
ou.psm1
) PSModulePath. Ce modèle de recherche permet à plusieurs versions du même module d’être installées dans différents dossiers. Par exemple :
Directory: C:\Program Files\WindowsPowerShell\Modules\PowerShellGet
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 8/14/2020 5:56 PM 1.0.0.1
d---- 9/13/2019 3:53 PM 2.1.2
Par défaut, PowerShell charge le numéro de version le plus élevé d’un module lorsque plusieurs versions sont trouvées. Pour charger une version spécifique, utilisez Import-Module
le paramètre FullyQualifiedName . Pour plus d’informations, voir Import-Module.
Modification de PSModulePath
Dans la plupart des cas, vous devez installer des modules dans les emplacements de module par défaut. Toutefois, vous devrez peut-être modifier la valeur de la variable d’environnement PSModulePath
.
Par exemple, pour ajouter temporairement le C:\Program Files\Fabrikam\Modules
répertoire à $env:PSModulePath
la session active, tapez :
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Pour modifier la valeur de chaque session, modifiez la clé de PSModulePath
Registre stockant les PSModulePath
valeurs. Les PSModulePath
valeurs sont stockées dans le Registre sous forme de chaînes non expirées . Pour éviter d’enregistrer définitivement les PSModulePath
valeurs sous forme de chaînes développées , utilisez la GetValue()
méthode sur la sous-clé et modifiez la valeur directement.
L’exemple suivant ajoute le C:\Program Files\Fabrikam\Modules
chemin d’accès à la valeur de la PSModulePath
variable d’environnement sans développer les chaînes non expirées.
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Pour ajouter un chemin d’accès au paramètre utilisateur, utilisez le code suivant :
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)