Grundlegendes zu PSModulePath
Kurze Beschreibung
In diesem Artikel werden der Zweck und die Verwendung der $env:PSModulePath
Umgebungsvariable beschrieben.
Lange Beschreibung
Die Umgebungsvariable $env:PSModulePath
enthält eine Liste von Ordnerspeicherorten. PowerShell durchsucht rekursiv jeden Ordner nach Moduldateien (.psd1
oder .psm1
) Dateien.
Standardmäßig sind die zugewiesenen $env:PSModulePath
effektiven Speicherorte:
- Module, die im CurrentUser-Bereich installiert sind, werden in
$HOME\Documents\WindowsPowerShell\Modules
gespeichert. - Module, die im AllUsers-Bereich installiert sind, werden in
$env:ProgramFiles\WindowsPowerShell\Modules
gespeichert. - Module, die mit Windows PowerShell ausgeliefert werden, die in
$PSHOME\Modules
, d. h$env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
.
PowerShell PSModulePath-Konstruktion
Der Wert wird $env:PSModulePath
jedes Mal erstellt, wenn PowerShell gestartet wird.
Der Wert variiert je nach Version von PowerShell und wie Sie es gestartet haben.
Windows PowerShell-Start
Windows PowerShell verwendet die folgende Logik, um den PSModulePath
Start zu erstellen:
- Wenn
PSModulePath
nicht vorhanden, kombinieren Sie CurrentUser, AllUsers und die$PSHOME
Modulpfade. - Falls
PSModulePath
vorhanden:$PSHOME
EnthältPSModulePath
Modulpfad:- Der Pfad für AllUsers-Module wird vor dem
$PSHOME
Modulpfad eingefügt.
- Der Pfad für AllUsers-Module wird vor dem
- oder:
- Verwenden
PSModulePath
Sie einfach wie definiert, da der Benutzer den Speicherort absichtlich entfernt hat$PSHOME
.
- Verwenden
Der Pfad des CurrentUser-Moduls wird nur vorangestellt, wenn der Benutzerbereich $env:PSModulePath
nicht vorhanden ist. Andernfalls wird der Benutzerbereich $env:PSModulePath
wie definiert verwendet.
Modulsuchverhalten
PowerShell durchsucht rekursiv jeden Ordner im PSModulePath nach Moduldateien (.psd1
oder .psm1
) Dateien. Dieses Suchmuster ermöglicht die Installation mehrerer Versionen desselben Moduls in verschiedenen Ordnern. Zum Beispiel:
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
Standardmäßig lädt PowerShell die höchste Versionsnummer eines Moduls, wenn mehrere Versionen gefunden werden. Verwenden Sie Import-Module
zum Laden einer bestimmten Version den Parameter FullyQualifiedName . Weitere Informationen finden Sie unter Import-Module.
Ändern von PSModulePath
In den meisten Fällen sollten Sie Module an den Standardmodulspeicherorten installieren. Möglicherweise müssen Sie jedoch den Wert der PSModulePath
Umgebungsvariable ändern.
Wenn Sie beispielsweise das C:\Program Files\Fabrikam\Modules
Verzeichnis $env:PSModulePath
für die aktuelle Sitzung vorübergehend hinzufügen möchten, geben Sie Folgendes ein:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Um den Wert in PSModulePath
jeder Sitzung zu ändern, bearbeiten Sie den Registrierungsschlüssel, der die PSModulePath
Werte speichert. Die PSModulePath
Werte werden in der Registrierung als nichtexpandierte Zeichenfolgen gespeichert. Um das dauerhafte Speichern der PSModulePath
Werte als erweiterte Zeichenfolgen zu vermeiden, verwenden Sie die GetValue()
Methode für den Unterschlüssel, und bearbeiten Sie den Wert direkt.
Im folgenden Beispiel wird der C:\Program Files\Fabrikam\Modules
Pfad zum Wert der PSModulePath
Umgebungsvariablen hinzugefügt, ohne die nicht erweiterten Zeichenfolgen zu erweitern.
$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)
Verwenden Sie den folgenden Code, um der Benutzereinstellung einen Pfad hinzuzufügen:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)