Udostępnij za pośrednictwem


about_PSModulePath

Krótki opis

W tym artykule opisano przeznaczenie i użycie zmiennej środowiskowej $env:PSModulePath .

Długi opis

Zmienna $env:PSModulePath środowiskowa zawiera listę lokalizacji folderów, które są przeszukiwane w celu znalezienia modułów i zasobów. Program PowerShell cyklicznie wyszukuje każdy folder dla plików modułu (.psd1 lub .psm1).

Install-Modulema parametr Zakres, który umożliwia określenie, czy moduł jest zainstalowany dla bieżącego użytkownika, czy dla wszystkich użytkowników. Aby uzyskać więcej informacji, zobacz Install-Module (Instalowanie modułu).

Domyślnie obowiązującą lokalizacją przypisaną do $env:PSModulePath :

  • Lokalizacje dla całego systemu: te foldery zawierają moduły dostarczane za pomocą programu PowerShell. Te moduły są przechowywane w folderze $PSHOME\Modules . Jest to również lokalizacja, w której są zainstalowane moduły zarządzania systemem Windows.

    Moduły zainstalowane w zakresie AllUsers są przechowywane w folderze $env:ProgramFiles\WindowsPowerShell\Modules.

  • Moduły zainstalowane przez użytkownika: są to moduły zainstalowane w zakresie CurrentUser . Lokalizacja zakresu CurrentUser jest zazwyczaj folderem $HOME\Documents\WindowsPowerShell\Modules . Określona lokalizacja Documents folderu różni się w zależności od wersji systemu Windows i podczas korzystania z przekierowania folderów. Ponadto usługa Microsoft OneDrive może zmienić lokalizację Documents folderu. Lokalizację Documents folderu można sprawdzić przy użyciu następującego polecenia: [Environment]::GetFolderPath('MyDocuments').

  • Moduły specyficzne dla aplikacji: Programy instalacyjne mogą instalować moduły w innych katalogach, takich jak Program Files katalog. Instalator może dołączyć lokalizację aplikacji do wartości $env:PSModulePath.

Konstrukcja programu PowerShell PSModulePath

Wartość jest tworzona $env:PSModulePath za każdym razem, gdy program PowerShell jest uruchamiany. Wartość różni się w zależności od wersji programu PowerShell i sposobu jej uruchamiania.

Uruchamianie programu Windows PowerShell

Program Windows PowerShell używa następującej logiki do konstruowania podczas uruchamiania PSModulePath :

  • Jeśli PSModulePath nie istnieje, połącz ścieżki CurrentUser, AllUsers i $PSHOME modułów
  • Jeśli PSModulePath istnieje:
    • Jeśli PSModulePath zawiera $PSHOME ścieżkę modułów:
      • Ścieżka modułów AllUsers jest wstawiana przed $PSHOME ścieżką modułów
    • Innego:
      • Po prostu użyj PSModulePath jako zdefiniowanego, ponieważ użytkownik celowo usunął lokalizację $PSHOME

Ścieżka modułu CurrentUser jest poprzedzona prefiksem tylko wtedy, gdy zakres $env:PSModulePath użytkownika nie istnieje. W przeciwnym razie zakres $env:PSModulePath użytkownika jest używany zgodnie z definicją.

Zachowanie wyszukiwania modułu

Program PowerShell cyklicznie wyszukuje każdy folder w folderze PSModulePath dla plików modułu (.psd1 lub .psm1). Ten wzorzec wyszukiwania umożliwia zainstalowanie wielu wersji tego samego modułu w różnych folderach. Na przykład:

    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

Domyślnie program PowerShell ładuje najwyższy numer wersji modułu po znalezieniu wielu wersji. Aby załadować określoną wersję, użyj parametru Import-ModuleFullyQualifiedName . Aby uzyskać więcej informacji, zobacz Import-Module.

Modyfikowanie ścieżki PSModulePath

W większości sytuacji należy instalować moduły w domyślnych lokalizacjach modułów. Może być jednak konieczne zmianę wartości zmiennej środowiskowej PSModulePath .

Aby na przykład tymczasowo dodać C:\Program Files\Fabrikam\Modules katalog do $env:PSModulePath bieżącej sesji, wpisz:

$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"

Aby zmienić wartość PSModulePath w każdej sesji, zmodyfikuj klucz rejestru przechowując PSModulePath wartości. Wartości PSModulePath są przechowywane w rejestrze jako niezrozpaczone ciągi. Aby uniknąć trwałego zapisywania PSModulePath wartości jako rozszerzonych ciągów, użyj metody GetValue w podkluczu i zmodyfikuj wartość bezpośrednio.

Poniższy przykład dodaje ścieżkę C:\Program Files\Fabrikam\Modules do wartości PSModulePath zmiennej środowiskowej bez rozszerzania ciągów bez rozszerzania.

$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)

Aby dodać ścieżkę do ustawienia użytkownika, zmień dostawcę rejestru z HKLM:\ na 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)

Zobacz też