Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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. Program PowerShell cyklicznie wyszukuje każdy folder dla plików modułu (.psd1 lub .psm1).
Domyślnie obowiązującą lokalizacją przypisaną do $Env:PSModulePath :
- Moduły zainstalowane w zakresie CurrentUser są przechowywane w programie
$HOME\Documents\WindowsPowerShell\Modules. - Moduły zainstalowane w zakresie AllUsers są przechowywane w folderze
$Env:ProgramFiles\WindowsPowerShell\Modules. - Moduły dostarczane za pomocą programu Windows PowerShell przechowywane w
$PSHOME\Modulesprogramie , czyli$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules.
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
PSModulePathnie istnieje, połącz ścieżki CurrentUser, AllUsers i$PSHOMEmodułów - Jeśli
PSModulePathistnieje:- Jeśli
PSModulePathzawiera$PSHOMEścieżkę modułów:-
Ścieżka modułów AllUsers jest wstawiana przed
$PSHOMEścieżką modułów
-
Ścieżka modułów AllUsers jest wstawiana przed
- inaczej:
- Po prostu użyj
PSModulePathjako zdefiniowanego, ponieważ użytkownik celowo usunął lokalizację$PSHOME
- Po prostu użyj
- Jeśli
Ś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 jednak być 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 GetValue() metody w podkluczu i edytuj wartość bezpośrednio.
Poniższy przykład dodaje ścieżkę C:\Program Files\Fabrikam\Modules do wartości PSModulePath zmiennej środowiskowej bez rozszerzania niezrozpaczone ciągi.
$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)
Aby dodać ścieżkę do ustawienia użytkownika, użyj następującego kodu:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)