Grundlegendes zu PSModulePath
Kurze Beschreibung
In diesem Artikel werden der Zweck und die Verwendung der $env:PSModulePath
Umgebungsvariable beschrieben.
Lange Beschreibung
Die $env:PSModulePath
Umgebungsvariable enthält eine Liste der Ordnerspeicherorte, die durchsucht werden, um Module und Ressourcen zu finden. PowerShell durchsucht rekursiv jeden Ordner nach Moduldateien (.psd1
oder .psm1
) Dateien.
Install-Module
verfügt über einen Bereichsparameter , mit dem Sie angeben können, ob das Modul für den aktuellen Benutzer oder für alle Benutzer installiert ist. Weitere Informationen finden Sie unter Install-Module.
Standardmäßig sind die zugewiesenen $env:PSModulePath
effektiven Speicherorte:
Systemweite Speicherorte: Diese Ordner enthalten Module, die mit PowerShell ausgeliefert werden. Diese Module werden im
$PSHOME\Modules
Ordner gespeichert. Dies ist auch der Speicherort, an dem die Windows-Verwaltungsmodule installiert sind.Module, die im AllUsers-Bereich installiert sind, werden in
$env:ProgramFiles\WindowsPowerShell\Modules
gespeichert.Vom Benutzer installierte Module: Hierbei handelt es sich um Module, die im CurrentUser-Bereich installiert sind. Der Speicherort des CurrentUser-Bereichs ist in der Regel der
$HOME\Documents\WindowsPowerShell\Modules
Ordner. Der spezifische Speicherort desDocuments
Ordners variiert je nach Windows-Version und wenn Sie die Ordnerumleitung verwenden. Außerdem kann Microsoft OneDrive den Speicherort IhresDocuments
Ordners ändern. Sie können den Speicherort IhresDocuments
Ordners mit dem folgenden Befehl überprüfen:[Environment]::GetFolderPath('MyDocuments')
Anwendungsspezifische Module: Setupprogramme können Module in anderen Verzeichnissen installieren, z. B. das
Program Files
Verzeichnis. Das Installationsprogramm kann den Anwendungsspeicherort an den Wert von$env:PSModulePath
.
PowerShell PSModulePath-Konstruktion
Der Wert wird $env:PSModulePath
jedes Mal erstellt, wenn PowerShell gestartet wird.
Der Wert variiert je nach Version von PowerShell und dem Start.
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').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Wenn Sie der Benutzereinstellung einen Pfad hinzufügen möchten, ändern Sie den Registrierungsanbieter von HKLM:\
" in " 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)