about_PSModulePath
Krátký popis
Tento článek popisuje účel a použití $env:PSModulePath
proměnné prostředí.
Dlouhý popis
$env:PSModulePath
Proměnná prostředí obsahuje seznam umístění složek, ve kterých se hledají moduly a prostředky. PowerShell rekurzivně prohledá jednotlivé složky pro soubory modulu (.psd1
nebo .psm1
).
Install-Module
má parametr Scope, který umožňuje určit, zda je modul nainstalován pro aktuálního uživatele nebo pro všechny uživatele. Další informace naleznete v tématu Install-Module.
Ve výchozím nastavení jsou efektivní umístění přiřazená $env:PSModulePath
:
Systémová umístění: Tyto složky obsahují moduly, které jsou dodávány pomocí PowerShellu. Tyto moduly jsou uložené ve
$PSHOME\Modules
složce. Toto je také umístění, kde jsou nainstalované moduly pro správu Systému Windows.Moduly nainstalované v oboru AllUsers jsou uloženy v
$env:ProgramFiles\WindowsPowerShell\Modules
.Moduly nainstalované uživatelem: Jedná se o moduly nainstalované v oboru CurrentUser. Umístění oboru CurrentUser je obvykle
$HOME\Documents\WindowsPowerShell\Modules
složka. Konkrétní umístěníDocuments
složky se 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í vašíDocuments
složky. Umístění složkyDocuments
můžete ověřit pomocí následujícího příkazu:[Environment]::GetFolderPath('MyDocuments')
.Moduly specifické pro aplikace: Instalační programy můžou instalovat moduly do jiných adresářů, například v adresáři
Program Files
. Instalační program může připojit umístění aplikace k hodnotě$env:PSModulePath
.
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 spuštění.
Spuštění Windows PowerShellu
Windows PowerShell používá k vytvoření při spuštění následující logiku PSModulePath
:
- Pokud
PSModulePath
neexistuje, zkombinujte CurrentUser, AllUsers a cesty modulů.$PSHOME
- Pokud
PSModulePath
existuje:- Pokud
PSModulePath
obsahuje$PSHOME
cestu k modulům:- Cesta k modulům AllUsers se vloží před
$PSHOME
cestu k modulům.
- Cesta k modulům AllUsers se vloží před
- Jiného:
- Stačí ho použít
PSModulePath
tak, jak je definováno, protože uživatel záměrně odebral$PSHOME
umí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ý.
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. Abyste se vyhnuli trvalému ukládání PSModulePath
hodnot jako rozbalených řetězců, použijte metodu GetValue 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í rozbalených řetězců.
$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)
Chcete-li přidat cestu k uživatelskému nastavení, změňte zprostředkovatele registru na HKLM:\
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)
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro