Sdílet prostřednictvím


about_PSModulePath

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 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.
    • jiný:
      • Stačí ho použít PSModulePath tak, jak je definováno, protože uživatel záměrně odebral $PSHOME umístění.

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. 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)

Viz také