Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Rövid leírás
Ez a cikk a környezeti változó célját és használatát $Env:PSModulePath 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 modul -.psd1 vagy .psm1) fájlokat.
Alapértelmezés szerint a hozzárendelt $Env:PSModulePath tényleges helyek a következők:
- A CurrentUser hatókörben telepített modulok:
- Windows rendszeren ezek a modulok a következő helyen vannak tárolva
$HOME\Documents\PowerShell\Modules: . A mappa adott helye aDocumentsWindows 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. A mappa helyénekDocumentsellenő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 ezek a modulok a következő helyen vannak tárolva
- Az AllUsers hatókörben telepített modulok:
- Windows rendszeren ezek a modulok a következő helyen vannak tárolva
$Env:ProgramFiles\PowerShell\Modules: . - A nem Windows rendszerű rendszereken ezek a modulok a következő helyen vannak tárolva
/usr/local/share/powershell/Modules: .
- Windows rendszeren ezek a modulok a következő helyen vannak tárolva
- A PowerShell-lel szállított modulok tárolása a következő helyen
$PSHOME\Modulestörténik: .
Feljegyzés
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 tárolása a következő helyen
$HOME\Documents\WindowsPowerShell\Modulestörténik: . - Az AllUsers hatókörben telepített modulok tárolása a következő helyen
$Env:ProgramFiles\WindowsPowerShell\Modulestörténik: . - A Windows PowerShell-lel szállított modulok, amelyek
$PSHOME\Modulesa következő helyen$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modulestalálhatók: .
A PowerShell PSModulePath felépítése
Az érték $Env:PSModulePath 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 az alábbi logikát használja a rendszerindításkor:PSModulePath
- Ha
PSModulePathnem létezik, kombinálja a CurrentUser, az AllUsers és a$PSHOMEmodulok elérési útját - Ha
PSModulePathlétezik:- Ha
PSModulePathtartalmazza a$PSHOMEmodulok elérési útját:-
Az AllUsers-modulok elérési útja a modulok elérési útja előtt
$PSHOMEvan beszúrva
-
Az AllUsers-modulok elérési útja a modulok elérési útja előtt
- más:
- Csak a megadott módon használja
PSModulePath, mivel a felhasználó szándékosan eltávolította a$PSHOMEhelyet
- Csak a megadott módon használja
- Ha
A CurrentUser modul elérési útja csak akkor van előtagban, ha a felhasználói hatókör $Env:PSModulePath nem létezik. Ellenkező esetben a felhasználó hatóköre $Env:PSModulePath a definiált módon van 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. Az elérésiút-környezeti változók eltérően lesznek kezelve.
Windows PSModulePath rendszeren a rendszer a környezeti változóhoz hasonlóan Path kezeli.
Path más környezeti változóktól eltérően kezelik. Amikor egy folyamat elindul, a Windows egyesíti a felhasználó hatókörét Path a gép hatókörével Path.
- A felhasználó hatókörének lekérése
PSModulePath - Összehasonlítás az örökölt környezeti változó feldolgozásához
PSModulePath- Ha ugyanaz:
- Fűzze hozzá az AllUserst
PSModulePatha környezetváltozó szemantikájátPATHkövető végéhez - A Windows
System32elérési útja a megadottPSModulePathgépről származik, ezért nem kell explicit módon hozzáadni
- Fűzze hozzá az AllUserst
- Ha más, kezelje úgy, mintha a felhasználó explicit módon módosította volna, és ne fűzze hozzá az AllUserst
PSModulePath
- Ha ugyanaz:
- Előtag PS7 felhasználóval, rendszerrel és
$PSHOMEelérési utakkal ebben a sorrendben- Ha
powershell.config.jsona felhasználó hatókörePSModulePathvan, használja azt a felhasználó alapértelmezett beállítása helyett - Ha
powershell.config.jsona rendszer hatókörrelPSModulePathrendelkezik, használja azt 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 vitafórumban a Windows PowerShell azt jelenti, hogy mind powershell.exe a powershell_ise.exe.
A program a következő módosításokkal másolja $Env:PSModulePath át az értékeketWinPSModulePath:
- 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 modul elérési útjára
$PSHOME
A PS7-útvonalak el lesznek távolítva, hogy a PS7-modulok ne töltődhessenek be a Windows PowerShellbe. Az 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ása 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 modul - vagy.psd1.psm1) fájlokat. 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élda:
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 Import-Module a FullyQualifiedName paramétert. 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 $Env:PSModulePath az aktuális munkamenethez, í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 nem Windows-környezetben szeretné módosítani az összes munkamenet értékét PSModulePath , 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é az értékeket PSModulePath , szerkessze az értékeket tároló PSModulePath beállításkulcsot. Az PSModulePath értékek a beállításjegyzékben feloldatlan sztringekként vannak tárolva . Az értékek kibontott sztringekkéntPSModulePathvaló végleges mentésének elkerülése érdekében használja az GetValue() alkulcs metódusát, és szerkessze közvetlenül az értéket.
Az alábbi példa a környezeti változó értékéhez adja hozzá az C:\Program Files\Fabrikam\Modules elérési utat a PSModulePath fel nem használt sztringek kibontása nélkül.
$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)