Share via


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 qui sont recherchés pour rechercher des modules et des ressources. PowerShell recherche de manière récursive chaque dossier pour les fichiers de module (.psd1 ou .psm1) de manière récursive.

Install-Module a un paramètre Scope 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.

Par défaut, les emplacements effectifs auxquels ils sont affectés $env:PSModulePath sont les suivants :

  • Emplacements à l’échelle 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.

    Les modules installés dans l’étendue AllUsers sont stockés dans $env:ProgramFiles\WindowsPowerShell\Modules.

  • Modules installés par l’utilisateur : il s’agit de modules installés dans l’étendue CurrentUser . L’emplacement de l’étendue CurrentUser est généralement le $HOME\Documents\WindowsPowerShell\Modules dossier. L’emplacement spécifique du Documents dossier varie selon la version de Windows et lorsque vous utilisez la redirection de dossiers. En outre, Microsoft OneDrive peut modifier l’emplacement de votre Documents dossier. Vous pouvez vérifier l’emplacement de votre Documents dossier à l’aide de la commande suivante : [Environment]::GetFolderPath('MyDocuments').

  • Modules spécifiques à l’application : les programmes d’installation peuvent installer des modules dans d’autres répertoires, tels que le Program Files répertoire. Le programme d’installation peut ajouter l’emplacement de l’application à la valeur de $env:PSModulePath.

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 elle est 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
    • Autre:
      • Il suffit d’utiliser PSModulePath comme défini puisque l’utilisateur a délibérément supprimé l’emplacement $PSHOME

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 (.psd1ou.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 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 += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)

Pour ajouter un chemin d’accès au paramètre utilisateur, remplacez le fournisseur de Registre par HKLM:\HKCU:\.

$key = (Get-Item 'HKCU:\').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)

Voir aussi