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 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 aDocuments
Windows verziójától és a mappaátirányítás használatakor eltérő. Emellett a Microsoft OneDrive módosíthatja aDocuments
mappa helyét. A mappa helyénekDocuments
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/Modules
mappá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\Modules
tö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\Modules
történik: . - Az AllUsers hatókörben telepített modulok tárolása a következő helyen
$Env:ProgramFiles\WindowsPowerShell\Modules
történik: . - A Windows PowerShell-lel szállított modulok, amelyek
$PSHOME\Modules
a következő helyen$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
talá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
PSModulePath
nem létezik, kombinálja a CurrentUser, az AllUsers és a$PSHOME
modulok elérési útját - Ha
PSModulePath
létezik:- Ha
PSModulePath
tartalmazza a$PSHOME
modulok elérési útját:-
Az AllUsers-modulok elérési útja a modulok elérési útja előtt
$PSHOME
van 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$PSHOME
helyet
- 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
PSModulePath
a környezetváltozó szemantikájátPATH
követő végéhez - A Windows
System32
elérési útja a megadottPSModulePath
gé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
$PSHOME
elérési utakkal ebben a sorrendben- Ha
powershell.config.json
a felhasználó hatókörePSModulePath
van, használja azt a felhasználó alapértelmezett beállítása helyett - Ha
powershell.config.json
a rendszer hatókörrelPSModulePath
rendelkezik, 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éntPSModulePath
való 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)