about_PSModulePath
La $env:PSModulePath
variable d’environnement contient une liste d’emplacements de dossiers dans lesquels rechercher des modules et des ressources. PowerShell recherche de manière récursive chaque dossier pour les fichiers de module ( .psd1
ou .psm1
).
Par défaut, les emplacements effectifs affectés à $env:PSModulePath
sont les suivants :
Emplacements à l’ensemble du système : ces dossiers contiennent des modules fournis avec PowerShell. Ces modules sont stockés dans le
$PSHOME\Modules
dossier. il s’agit également de l’emplacement où sont installés les modules de gestion Windows.Modules installés par l’utilisateur : il s’agit de modules installés par l’utilisateur.
Install-Module
possède un paramètre d' étendue qui vous permet de spécifier si le module est installé pour l’utilisateur actuel ou pour tous les utilisateurs. Pour plus d’informations, consultez install-module.- sur Windows, l’emplacement de l’étendue CurrentUser propre à l’utilisateur est le
$HOME\Documents\PowerShell\Modules
dossier. L’emplacement de l’étendue ALLUSERS est$env:ProgramFiles\PowerShell\Modules
. - sur les systèmes non-Windows, l’emplacement de l’étendue CurrentUser propre à l’utilisateur est le
$HOME/.local/share/powershell/Modules
dossier. L’emplacement de l’étendue ALLUSERS est/usr/local/share/powershell/Modules
.
- sur Windows, l’emplacement de l’étendue CurrentUser propre à l’utilisateur est le
En outre, les programmes d’installation qui installent des modules dans d’autres répertoires, tels que le répertoire Program Files, peuvent ajouter leurs emplacements à la valeur de $env:PSModulePath
.
Notes
sur Windows, l’emplacement spécifique à l’utilisateur est le PowerShell\Modules
dossier situé dans le dossier Documents de votre profil utilisateur. le chemin d’accès spécifique de cet emplacement varie selon la version de Windows et si vous utilisez la redirection de dossiers ou non. Microsoft OneDrive pouvez également modifier l’emplacement de votre dossier Documents . Vous pouvez vérifier l’emplacement de votre dossier documents à l’aide de la commande suivante : [Environment]::GetFolderPath('MyDocuments')
.
Construction de PSModulePath PowerShell
La valeur de est construite à chaque démarrage de $env:PSModulePath
PowerShell.
La valeur varie en fonction de la version de PowerShell et de son mode de lancement.
démarrage Windows PowerShell
Windows PowerShell utilise la logique suivante pour construire PSModulePath
au démarrage :
- Si
PSModulePath
n’existe pas, combinez CurrentUser, ALLUSERS et les chemins des$PSHOME
modules - Si
PSModulePath
existe :- Si
PSModulePath
contient$PSHOME
le 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
- tierce
- Utilisez
PSModulePath
simplement comme défini, car l’utilisateur a délibérément supprimé l'$PSHOME
emplacement
- Utilisez
- Si
Le chemin d’accès du module CurrentUser est préfixé uniquement si l’étendue $env:PSModulePath
de l’utilisateur n’existe pas. Dans le cas contraire, l’étendue $env:PSModulePath
de l’utilisateur est utilisée comme définie.
Démarrage de PowerShell 7
dans Windows, pour la plupart des variables d’environnement, si la variable de portée utilisateur existe, un nouveau processus utilise cette valeur uniquement s’il existe une variable de portée ordinateur portant le même nom.
Dans PowerShell 7, PSModulePath
est traité de façon similaire à la façon dont la Path
variable d’environnement est traitée sur Windows. sur Windows, Path
est traité différemment des autres variables d’environnement. quand un processus est démarré, Windows combine l’étendue Path
de l’utilisateur avec l’étendue Path
de l’ordinateur.
- Récupérer l’étendue de l’utilisateur
PSModulePath
- Comparer pour traiter la variable d’environnement héritée
PSModulePath
- Si le même :
- Ajoutez le ALLUSERS
PSModulePath
à la fin suivant la sémantique de laPath
variable d’environnement. - le chemin d’accès Windows
System32
provient de l’ordinateur définiPSModulePath
, il n’est donc pas nécessaire de l’ajouter explicitement
- Ajoutez le ALLUSERS
- Si différent, Treat comme si l’utilisateur l’avait explicitement modifié et n’ajoute pas ALLUSERS
PSModulePath
- Si le même :
- Préfixe avec utilisateur, système et
$PSHOME
chemins d’accès PS7 dans cet ordre- Si
powershell.config.json
contient une étenduePSModulePath
d’utilisateur, utilisez-le à la place de la valeur par défaut pour l’utilisateur - Si
powershell.config.json
contient une portéePSModulePath
système, utilisez-le à la place de la valeur par défaut pour le système.
- Si
Les systèmes UNIX n’ont pas de séparation entre les variables d’environnement utilisateur et système.
PSModulePath
est hérité et les chemins d’accès 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 powershell.exe
et powershell_ise.exe
.
La valeur de $env:PSModulePath
est copiée vers WinPSModulePath
avec les modifications suivantes :
- Supprimer PS7 le chemin d’accès au module utilisateur
- Supprimer PS7 le chemin d’accès au module système
- Supprimer PS7 le chemin d’accès au
$PSHOME
module
Les chemins d’accès PS7 sont supprimés afin que les modules PS7 ne soient pas chargés dans Windows PowerShell. La valeur est utilisée lors du démarrage de WinPSModulePath
Windows PowerShell.
Démarrage de PowerShell 7 à partir de Windows PowerShell
le démarrage de PowerShell 7 se poursuit comme avec l’ajout de chemins d’accès hérités qui Windows PowerShell ajoutés. Étant donné que les chemins d’accès spécifiques à PS7 sont préfixés, il n’y a aucun problème fonctionnel.
Comportement de recherche de module
PowerShell effectue une recherche récursive dans chaque dossier du PSModulePath pour les fichiers de module ( .psd1
ou .psm1
). Ce modèle de recherche permet d’installer plusieurs versions du même module dans des dossiers différents. 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
avec le paramètre FullyQualifiedName . Pour plus d’informations, voir Import-Module.
Modification de PSModulePath
Dans la plupart des cas, vous devez installer les modules à l’emplacement des modules par défaut. Toutefois, il se peut que vous ayez besoin de modifier la valeur de la PSModulePath
variable d’environnement.
Par exemple, pour ajouter temporairement le C:\Program Files\Fabrikam\Modules
répertoire à $env:PSModulePath
pour 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 d’accès 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 en non-Windows
pour modifier la valeur de PSModulePath
pour 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 pour chaque session dans un environnement de Windows, modifiez la clé de PSModulePath
registre qui stocke les PSModulePath
valeurs. Les PSModulePath
valeurs sont stockées dans le registre en tant que chaînes non développées . Pour éviter d’enregistrer définitivement les PSModulePath
valeurs en tant que chaînes développées , utilisez la méthode GetValue 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 développées.
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';C:\Program Files\Fabrikam\Modules' # or '%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Pour ajouter un chemin d’accès au paramètre utilisateur, modifiez le fournisseur de registre de HKLM:\
en HKCU:\
.
$key = (Get-Item 'HKCU:\SYSTEM\CurrentControlSet\Control\Session Manager').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';C:\Program Files\Fabrikam\Modules' # or '%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Voir aussi
Commentaires
Envoyer et afficher des commentaires pour