Freigeben über


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\Modulesgespeichert.

  • 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 des Documents Ordners variiert je nach Windows-Version und wenn Sie die Ordnerumleitung verwenden. Außerdem kann Microsoft OneDrive den Speicherort Ihres Documents Ordners ändern. Sie können den Speicherort Ihres Documents 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ält PSModulePath Modulpfad:
      • Der Pfad für AllUsers-Module wird vor dem $PSHOME Modulpfad eingefügt.
    • oder:
      • Verwenden PSModulePath Sie einfach wie definiert, da der Benutzer den Speicherort absichtlich entfernt hat $PSHOME .

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)

Weitere Informationen