Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Tento článek popisuje účel a použití $Env:PSModulePath proměnné prostředí.
Dlouhý popis
Proměnná $Env:PSModulePath prostředí obsahuje seznam umístění složek. PowerShell rekurzivně prohledá jednotlivé složky pro soubory modulu (.psd1 nebo .psm1).
Ve výchozím nastavení jsou efektivní umístění přiřazená $Env:PSModulePath :
- Moduly nainstalované v oboru CurrentUser jsou uloženy v
$HOME\Documents\WindowsPowerShell\Modules. - Moduly nainstalované v oboru AllUsers jsou uloženy v
$Env:ProgramFiles\WindowsPowerShell\Modules. - Moduly, které jsou dodávány pomocí Prostředí Windows PowerShell uložené v
$PSHOME\Modules, což je$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules.
PowerShell PSModulePath – konstrukce
Hodnota $Env:PSModulePath se vytvoří při každém spuštění PowerShellu.
Hodnota se liší podle verze PowerShellu a způsobu, jakým jste ji spustili.
Spuštění Windows PowerShellu
Windows PowerShell používá k vytvoření při spuštění následující logiku PSModulePath :
- Pokud
PSModulePathneexistuje, zkombinujte CurrentUser, AllUsers a cesty modulů.$PSHOME - Pokud
PSModulePathexistuje:- Pokud
PSModulePathobsahuje$PSHOMEcestu k modulům:-
Cesta k modulům AllUsers se vloží před
$PSHOMEcestu k modulům.
-
Cesta k modulům AllUsers se vloží před
- jiný:
- Stačí ho použít
PSModulePathtak, jak je definováno, protože uživatel záměrně odebral$PSHOMEumístění.
- Stačí ho použít
- Pokud
Cesta modulu CurrentUser je předpona pouze v případě, že obor $Env:PSModulePath uživatele neexistuje. V opačném případě se obor $Env:PSModulePath uživatele použije jako definovaný.
Note
Když Windows PowerShell běží ve stromu procesu, který obsahuje PowerShell 7, může dědit PSModulePath hodnotu, která zahrnuje cesty modulu PowerShellu 7. PowerShell 7 odebere vlastní cesty modulů při spuštění Windows PowerShellu přímo, ale ne při spuštění Windows PowerShellu prostřednictvím zprostředkujícího procesu. Zděděné cesty modulu PowerShellu 7 předchází cestě k Windows systémovému modulu PowerShellu, což může způsobit, že se názvy sdílených modulů, například Microsoft.PowerShell.Utility, přeloží na verze modulu PowerShellu 7, které Windows PowerShell nemůže načíst. Tím se přeruší automatické načítání modulu. Další informace a alternativní řešení najdete v powershellové verzi 7 tohoto článku.
Chování vyhledávání modulů
PowerShell rekurzivně prohledá jednotlivé složky v psModulePath pro soubory modulu (.psd1 nebo .psm1). Tento vzor vyhledávání umožňuje instalaci více verzí stejného modulu do různých složek. Příklad:
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
PowerShell ve výchozím nastavení načte nejvyšší počet verzí modulu, když se najde více verzí. Pokud chcete načíst konkrétní verzi, použijte Import-Module s parametrem FullyQualifiedName . Další informace najdete v tématu Import-Module.
Úprava psModulePath
Ve většině situací byste měli instalovat moduly do výchozích umístění modulů. Možná ale budete muset změnit hodnotu PSModulePath proměnné prostředí.
Pokud například chcete dočasně přidat C:\Program Files\Fabrikam\Modules adresář pro $Env:PSModulePath aktuální relaci, zadejte:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Pokud chcete změnit hodnotu PSModulePath v každé relaci, upravte klíč registru, do který se PSModulePath ukládají hodnoty. Hodnoty PSModulePath jsou uloženy v registru jako nevyexpandované řetězce. Chcete-li se vyhnout trvalému ukládání PSModulePath hodnot jako rozbalených řetězců, použijte GetValue() metodu na podklíči a upravte hodnotu přímo.
Následující příklad přidá C:\Program Files\Fabrikam\Modules cestu k hodnotě PSModulePath proměnné prostředí bez rozbalení nevyexpandovaných řetězců.
$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)
Pokud chcete přidat cestu k uživatelskému nastavení, použijte následující kód:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)