Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
Ez a cikk a $Env:PSModulePath környezeti változó célját és használatát ismerteti.
Hosszú leírás
A $Env:PSModulePath környezeti változó a mappahelyek listáját tartalmazza. A PowerShell rekurzív módon keres minden mappában modulfájlokat (.psd1 vagy .psm1).
Alapértelmezés szerint a $Env:PSModulePath hozzárendelt tényleges helyek a következők:
- Az CurrentUser hatókörébe telepített modulok:
- Windows rendszeren ezeket a modulokat a rendszer
$HOME\Documents\PowerShell\Modulestárolja. ADocumentsmappa helye a Windows verziójától és a mappaátirányítás használatakor eltérő. Emellett a Microsoft OneDrive módosíthatja aDocumentsmappa helyét. ADocumentsmappa helyének ellenőrzéséhez futtassa a következő parancsot:[Environment]::GetFolderPath('MyDocuments'). - A nem Windows rendszerű rendszereken ezek a modulok a
$HOME/.local/share/powershell/Modulesmappában vannak tárolva.
- Windows rendszeren ezeket a modulokat a rendszer
- A AllUsers hatókörébe telepített modulok:
- Windows rendszeren ezeket a modulokat a rendszer
$Env:ProgramFiles\PowerShell\Modulestárolja. - A nem Windows rendszerű rendszereken ezeket a modulokat a rendszer
/usr/local/share/powershell/Modulestárolja.
- Windows rendszeren ezeket a modulokat a rendszer
- A PowerShell-lel szállított modulokat a rendszer
$PSHOME\Modulestárolja.
Jegyzet
A PowerShell-modulokat tartalmazó alkalmazások más könyvtárakban is telepíthetnek modulokat Windows rendszeren, például a Program Files mappában. Előfordulhat, hogy a telepítőcsomag nem fűzi hozzá a helyet a $Env:PSModulePath.
A Windows PowerShell 5.1 alapértelmezett helyei eltérnek a PowerShell 7-től.
- A CurrentUser hatókörben telepített modulok
$HOME\Documents\WindowsPowerShell\Modulesvannak tárolva. - A AllUsers hatókörben telepített modulok
$Env:ProgramFiles\WindowsPowerShell\Modulesvannak tárolva. - Az
$PSHOME\Modules-ben tárolt Windows PowerShellt tartalmazó modulokat, amelyek$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules.
A PowerShell PSModulePath felépítése
A $Env:PSModulePath értéke a PowerShell minden indításakor létre lesz építve.
Az érték a PowerShell verziója és az indítási módjától függően változik.
Windows PowerShell indítása
A Windows PowerShell a következő logikával hozza létre a PSModulePath indításkor:
- Ha
PSModulePathnem létezik, egyesítse CurrentUser, AllUsersés a$PSHOMEmodulok elérési útját - Ha
PSModulePathlétezik:- Ha
PSModulePath$PSHOMEmodul elérési útját tartalmazza:-
AllUsers modulok elérési útja
$PSHOMEmodulok elérési útja előtt van beszúrva
-
AllUsers modulok elérési útja
- más:
- Csak használja a
PSModulePatha megadott módon, mivel a felhasználó szándékosan eltávolította a$PSHOMEhelyet
- Csak használja a
- Ha
A CurrentUser modul elérési útja csak akkor lesz előtaggal el van adva, ha a felhasználói hatókör $Env:PSModulePath nem létezik. Ellenkező esetben a felhasználó hatóköre $Env:PSModulePath a megadott módon lesz használva.
A PowerShell 7 indítása
Windows rendszerben a legtöbb környezeti változó esetében, ha a felhasználó által hatókörbe tartozó változó létezik, egy új folyamat csak ezt az értéket használja, még akkor is, ha egy azonos nevű gépi hatókörű változó létezik. A elérési út környezeti változók eltérően lesznek kezelve.
Windows rendszeren a PSModulePath a Path környezeti változóhoz hasonlóan kezeli.
Path másként kezelik, mint a többi környezeti változót. Amikor egy folyamat elindul, a Windows egyesíti a felhasználó hatókörű Path a gépi hatókörű Path.
- A felhasználó által hatókörbe tartozó
PSModulePathlekérése - Összehasonlítás az örökölt
PSModulePathkörnyezeti változóval- Ha ugyanaz:
- Fűzze hozzá a AllUsers
PSModulePatha végéhez aPATHkörnyezeti változó szemantikája után - A Windows
System32elérési útja a gép által megadottPSModulePathszármazik, ezért nem kell explicit módon hozzáadni
- Fűzze hozzá a AllUsers
- Ha más, kezelje úgy, mintha a felhasználó explicit módon módosította volna, és ne fűzze hozzá AllUsers
PSModulePath
- Ha ugyanaz:
- Előtag PS7 felhasználóval, rendszerrel és
$PSHOMEelérési úttal ebben a sorrendben- Ha
powershell.config.jsonegy felhasználó által hatókörrel rendelkezőPSModulePathtartalmaz, használja azt a felhasználó alapértelmezett beállítása helyett - Ha
powershell.config.jsontartalmaz egy rendszer hatókörűPSModulePath, használja ezt a rendszer alapértelmezett beállítása helyett
- Ha
A nem Windows rendszerű rendszerek nem különíthetők el a felhasználói és a rendszerkörnyezeti változóktól.
PSModulePath öröklődik, és a PS7-specifikus elérési utak előtaggal vannak elnevezettek, ha még nincs definiálva.
A Windows PowerShell indítása a PowerShell 7-ből
Ebben a cikkben a Windows PowerShell powershell.exe és powershell_ise.exeis jelent.
A $Env:PSModulePath értéke a következő módosításokkal lesz átmásolva WinPSModulePath:
- A PS7 eltávolítása a felhasználói modul elérési útjára
- A PS7 eltávolítása a rendszermodul elérési útjára
- A PS7 eltávolítása a
$PSHOMEmodul elérési útjára
A PS7-útvonalak el lesznek távolítva, hogy a PS7-modulok ne töltődhessenek be a Windows PowerShellbe. A WinPSModulePath érték a Windows PowerShell indításakor használatos.
A PowerShell 7 indítása a Windows PowerShellből
A PowerShell 7 indítási as-is a Windows PowerShell által hozzáadott öröklő útvonalak hozzáadásával folytatódik. Mivel a PS7-specifikus elérési utak előtaggal vannak elnevezve, nincs funkcionális probléma.
Modulkeresési viselkedés
A PowerShell rekurzív módon keres a PSModulePath minden mappájában modulfájlokat (.psd1 vagy .psm1). Ez a keresési minta lehetővé teszi ugyanannak a modulnak több verzióját is különböző mappákba telepíteni. Például:
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
Alapértelmezés szerint a PowerShell betölti a modul legmagasabb verziószámát, ha több verziót talál. Egy adott verzió betöltéséhez használja a Import-Module a FullyQualifiedName paraméterrel. További információ: Import-Module.
A PSModulePath módosítása
A legtöbb esetben az alapértelmezett modulhelyeken kell telepítenie a modulokat. Előfordulhat azonban, hogy módosítania kell a PSModulePath környezeti változó értékét.
Ha például ideiglenesen hozzá szeretné adni a C:\Program Files\Fabrikam\Modules könyvtárat az aktuális munkamenet $Env:PSModulePath, írja be a következőt:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
A parancsban lévő pontosvessző (;) elválasztja az új elérési utat a listában azt megelőző elérési úttól. Nem Windows-platformokon a kettőspont (:) elválasztja az elérési utak helyét a környezeti változóban.
PSModulePath módosítása nem Windows rendszerben
Ha módosítani szeretné a PSModulePath értékét egy nem Windows-környezetben lévő összes munkamenethez, adja hozzá az előző parancsot a PowerShell-profiljához.
A PSModulePath módosítása a Windowsban
Ha minden munkamenetben módosítani szeretné a PSModulePath értékét, szerkessze az PSModulePath értékeket tároló beállításkulcsot. A PSModulePath értékek sztringekként vannak tárolva a beállításjegyzékben. Ha el szeretné kerülni, hogy a PSModulePath értékeket kibontott sztringekként mentse, használja az alkulcs GetValue() metódusát, és szerkessze közvetlenül az értéket.
Az alábbi példa a C:\Program Files\Fabrikam\Modules elérési utat adja hozzá a PSModulePath környezeti változó értékéhez anélkül, hogy kibontja a feloldott sztringeket.
$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)
Ha elérési utat szeretne hozzáadni a felhasználói beállításhoz, használja a következő kódot:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)