Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Brève description
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 :
- Modules installés dans l’étendue CurrentUser :
- Sur Windows, ces modules sont stockés dans
$HOME\Documents\PowerShell\Modules. L’emplacement spécifique duDocumentsdossier varie selon la version de Windows et lorsque vous utilisez la redirection de dossiers. En outre, Microsoft OneDrive peut modifier l’emplacement de votreDocumentsdossier. Pour vérifier l’emplacement de votreDocumentsdossier, exécutez la commande suivante :[Environment]::GetFolderPath('MyDocuments'). - Sur les systèmes non Windows, ces modules sont stockés dans le
$HOME/.local/share/powershell/Modulesdossier.
- Sur Windows, ces modules sont stockés dans
- Modules installés dans l’étendue AllUsers :
- Sur Windows, ces modules sont stockés dans
$Env:ProgramFiles\PowerShell\Modules. - Sur les systèmes non-Windows, ces modules sont stockés dans
/usr/local/share/powershell/Modules.
- Sur Windows, ces modules sont stockés dans
- Les modules fournis avec PowerShell sont stockés dans
$PSHOME\Modules.
Remarque
Les applications qui incluent des modules PowerShell peuvent installer des modules dans d’autres répertoires sur Windows, tels que le Program Files dossier. Le package du programme d’installation peut ne pas ajouter l’emplacement au $Env:PSModulePath.
Les emplacements par défaut pour Windows PowerShell 5.1 sont différents de PowerShell 7.
- 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
PSModulePathn’existe pas, combinez CurrentUser, AllUsers et les chemins d’accès aux$PSHOMEmodules - S’il
PSModulePathexiste :- Si
PSModulePathcontient le$PSHOMEchemin des modules :-
Le chemin des modules AllUsers est inséré avant
$PSHOMEle chemin des modules
-
Le chemin des modules AllUsers est inséré avant
- autre:
- Il suffit d’utiliser
PSModulePathcomme 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.
Démarrage de PowerShell 7
Dans Windows, pour la plupart des variables d’environnement, si la variable définie par l’utilisateur existe, un nouveau processus utilise cette valeur uniquement, même lorsqu’une variable délimitée par l’ordinateur du même nom existe. Les variables d’environnement de chemin d’accès sont traitées différemment.
Sur Windows, PSModulePath il est traité comme la façon dont la Path variable d’environnement est traitée.
Path est traité différemment des autres variables d’environnement. Lorsqu’un processus est démarré, Windows combine l’étendue Path utilisateur avec l’étendue Pathde l’ordinateur.
- Récupérer l’étendue utilisateur
PSModulePath - Comparer à la variable d’environnement héritée
PSModulePathdu processus- Si la même chose est la même :
-
Ajoutez allUsers
PSModulePathà la fin en suivant la sémantique de la variable d’environnementPATH - Le chemin d’accès Windows
System32provient de l’ordinateur définiPSModulePath. Il n’est donc pas nécessaire d’ajouter explicitement
-
Ajoutez allUsers
- Si elle est différente, traitez comme si l’utilisateur l’a modifié explicitement et n’ajoutez pas AllUsers
PSModulePath
- Si la même chose est la même :
- Préfixe avec l’utilisateur, le système et
$PSHOMEles chemins d’accès PS7 dans cet ordre- Si
powershell.config.jsoncontient un utilisateur délimitéPSModulePath, utilisez-le au lieu de la valeur par défaut pour l’utilisateur. - Si
powershell.config.jsonelle contient une étenduePSModulePathsystème, utilisez-la au lieu de la valeur par défaut pour le système.
- Si
Les systèmes non-Windows n’ont pas de séparation des variables d’environnement utilisateur et système.
PSModulePath est hérité et les chemins spécifiques à PS7 sont préfixés s’ils ne sont pas déjà définis.
Démarrage de Windows PowerShell à partir de PowerShell 7
Pour cette discussion, Windows PowerShell signifie à la fois powershell.exe et powershell_ise.exe.
La valeur de celle-ci $Env:PSModulePath est copiée avec WinPSModulePath les modifications suivantes :
- Supprimer PS7 le chemin du module utilisateur
- Supprimer PS7 le chemin du module système
- Supprimer PS7 le chemin du
$PSHOMEmodule
Les chemins PS7 sont supprimés afin que les modules PS7 ne soient pas chargés dans Windows PowerShell. La WinPSModulePath valeur est utilisée lors du démarrage de Windows PowerShell.
Démarrage de PowerShell 7 à partir de Windows PowerShell
Le démarrage de PowerShell 7 se poursuit en l’état avec l’ajout de chemins d’accès ajoutés par Windows PowerShell. Étant donné que les chemins spécifiques à PS7 sont préfixés, il n’existe aucun problème fonctionnel.
Comportement de recherche de module
PowerShell recherche de manière récursive chaque dossier dans les . 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"
Le point-virgule (;) dans la commande sépare le nouveau chemin d’accès du chemin qui le précède dans la liste. Sur les plateformes non Windows, le signe deux-points (:) sépare les emplacements de chemin d’accès dans la variable d’environnement.
Modification de PSModulePath dans non-Windows
Pour modifier la valeur de PSModulePath chaque session dans un environnement non-Windows, ajoutez la commande précédente à votre profil PowerShell.
Modification de PSModulePath dans Windows
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)