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í proměnné prostředí $Env:PSModulePath.
Dlouhý popis
Proměnná prostředí $Env:PSModulePath 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:
- Ve Windows jsou tyto moduly uloženy v
$HOME\Documents\PowerShell\Modules. Konkrétní umístění složkyDocumentsse liší podle verze Systému Windows a při použití přesměrování složky. Microsoft OneDrive může také změnit umístění složkyDocuments. Pokud chcete ověřit umístění složkyDocuments, spusťte následující příkaz:[Environment]::GetFolderPath('MyDocuments'). - V systémech jiných než Windows jsou tyto moduly uložené ve složce
$HOME/.local/share/powershell/Modules.
- Ve Windows jsou tyto moduly uloženy v
- Moduly nainstalované v oboru AllUsers:
- Ve Windows jsou tyto moduly uloženy v
$Env:ProgramFiles\PowerShell\Modules. - V systémech, které nejsou systémy Windows, jsou tyto moduly uloženy v
/usr/local/share/powershell/Modules.
- Ve Windows jsou tyto moduly uloženy v
- Moduly, které jsou dodávány pomocí PowerShellu, jsou uloženy v
$PSHOME\Modules.
Poznámka
Aplikace, které obsahují moduly PowerShellu, můžou instalovat moduly do jiných adresářů ve Windows, jako je například složka Program Files. Instalační balíček nemusí připojit umístění k $Env:PSModulePath.
Výchozí umístění pro Windows PowerShell 5.1 se liší od PowerShellu 7.
- 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 v 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í PSModulePath při spuštění následující logiku:
- Pokud
PSModulePathneexistuje, zkombinujte CurrentUser, AllUsersa cesty k modulům$PSHOME. - Pokud
PSModulePathexistuje:- Pokud
PSModulePathobsahuje cestu k modulům$PSHOME:- cesta k modulům AllUsers se vloží před cestu k modulům
$PSHOME
- cesta k modulům AllUsers se vloží před cestu k modulům
- jiný:
- Stačí použít
PSModulePathtak, jak je definováno, protože uživatel záměrně odebral$PSHOMEumístění.
- Stačí použít
- Pokud
Cesta k modulu CurrentUser je předpona pouze v případě, že obor uživatele $Env:PSModulePath neexistuje. V opačném případě se $Env:PSModulePath oboru uživatele použije podle definice.
Spuštění PowerShellu 7
Ve Windows pro většinu proměnných prostředí platí, že pokud existuje proměnná s oborem uživatele, použije nový proces tuto hodnotu pouze v případě, že existuje proměnná s oborem počítače se stejným názvem. Cesta proměnných prostředí se zpracovává odlišně.
Ve Windows se PSModulePath zachází podobně jako s Path proměnnou prostředí.
Path se zachází jinak než s jinými proměnnými prostředí. Při spuštění procesu systém Windows kombinuje Path s Paths oborem počítače .
- Načtení
PSModulePaths oborem uživatele - Porovnání s procesem zděděným
PSModulePathproměnnou prostředí- Pokud je to stejné:
- Připojte AllUsers
PSModulePathna konec za sémantikou proměnné prostředíPATH. - Cesta windows
System32pochází z počítače definovanéhoPSModulePath, takže není nutné explicitně přidávat.
- Připojte AllUsers
- Pokud se liší, považují se za uživatele, který ho explicitně upravil, a nepřipojujte AllUsers
PSModulePath
- Pokud je to stejné:
- Předpona uživatelem PS7, systémem a
$PSHOMEcestami v daném pořadí- Pokud
powershell.config.jsonobsahujePSModulePaths vymezeným oborem uživatele, použijte místo výchozího nastavení uživatele. - Pokud
powershell.config.jsonobsahuje systém vymezenýPSModulePath, použijte místo výchozího nastavení systému.
- Pokud
Jiné systémy než Windows nemají oddělení proměnných prostředí User a System.
PSModulePath je zděděna a cesty specifické pro PS7 jsou předpony, pokud ještě nejsou definovány.
Spuštění Windows PowerShellu z PowerShellu 7
Pro tuto diskuzi windows PowerShell znamená powershell.exe i powershell_ise.exe.
Hodnota $Env:PSModulePath se zkopíruje do WinPSModulePath s následujícími úpravami:
- Odebrání cesty modulu uživatele PS7
- Odebrání cesty systémového modulu PS7
- Odebrání cesty modulu
$PSHOMEPS7
Cesty PS7 se odeberou, aby se moduly PS7 nenačetly ve Windows PowerShellu. Hodnota WinPSModulePath se používá při spouštění Prostředí Windows PowerShell.
Spuštění PowerShellu 7 z Windows PowerShellu
Spuštění PowerShellu 7 pokračuje as-is přidáním zděděných cest, které přidal Windows PowerShell. Vzhledem k tomu, že cesty specifické pro PS7 jsou předpony, neexistuje žádný funkční problém.
Chování vyhledávání modulů
PowerShell rekurzivně prohledá jednotlivé složky v PSModulePath pro soubory modulů (.psd1 nebo .psm1). Tento vzor vyhledávání umožňuje instalaci více verzí stejného modulu do různých složek. Napří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 proměnné prostředí PSModulePath.
Pokud chcete například dočasně přidat adresář C:\Program Files\Fabrikam\Modules do $Env:PSModulePath pro aktuální relaci, zadejte:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Středník (;) v příkazu odděluje novou cestu od cesty, která předchází v seznamu. Na platformách jiných než Windows odděluje dvojtečka (:) umístění cest v proměnné prostředí.
Úprava psModulePath v jiných systémech než Windows
Pokud chcete změnit hodnotu PSModulePath pro každou relaci v prostředí mimo Windows, přidejte předchozí příkaz do profilu PowerShellu.
Úprava psModulePath ve Windows
Pokud chcete změnit hodnotu PSModulePath v každé relaci, upravte klíč registru tak, aby ukládaly hodnoty PSModulePath. Hodnoty PSModulePath jsou uloženy v registru jako nevyexpandované řetězce. Pokud se chcete vyhnout trvalému ukládání hodnot PSModulePath jako rozbalených řetězců, použijte GetValue() metodu na podklíči a upravte hodnotu přímo.
Následující příklad přidá cestu C:\Program Files\Fabrikam\Modules k hodnotě proměnné prostředí PSModulePath bez rozbalení nerozbalený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)