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, ve kterých se hledají moduly a prostředky. 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:
Umístění v rámci celého systému: Tyto složky obsahují moduly, které se dodávají s PowerShellem. Tyto moduly jsou uloženy ve
$PSHOME\Modulessložce.- V systému Windows jsou moduly nainstalované v oboru AllUsers uloženy v
$env:ProgramFiles\WindowsPowerShell\Modules. - V systémech jiných než Windows jsou moduly nainstalované v oboru AllUsers uloženy v
/usr/local/share/powershell/Modules.
- V systému Windows jsou moduly nainstalované v oboru AllUsers uloženy v
Moduly nainstalované uživatelem: V systému Windows jsou moduly nainstalované v oboru CurrentUser obvykle uloženy ve
$HOME\Documents\WindowsPowerShell\Modulessložce. 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. UmístěníDocumentssložky můžete ověřit pomocí následujícího příkazu:[Environment]::GetFolderPath('MyDocuments').V systémech s jiným systémem než Windows jsou moduly nainstalované v oboru CurrentUser uloženy ve
$HOME/.local/share/powershell/Modulessložce.Moduly specifické pro aplikaci: Instalační programy mohou instalovat moduly do jiných adresářů, například do
Program Filessložky v systému Windows. Instalační balíček může, ale nemusí připojit umístění k rozhraní$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í 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.
V PowerShellu 7 PSModulePath se zachází podobně jako s proměnnou Path prostředí ve Windows. V systému Windows Path se zachází jinak než s ostatní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 systému Windows
System32pochází z definovanéhoPSModulePathpočítače, takže ji 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 s uživatelem, systémem a
$PSHOMEcestami konzole PS7 v tomto 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
Systémy Unix 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á však budete muset změnit hodnotu proměnné PSModulePath prostředí.
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. Chcete-li se vyhnout trvalému PSModulePath ukládání hodnot jako rozbalených řetězců, použijte metodu GetValue v 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 rozšíření nerozbalený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 poskytovatele registru 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)