about_PSModulePath
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 modulok és erőforrások keresésére keresendő mappahelyek listáját tartalmazza. A PowerShell rekurzív módon keres minden mappában modul -.psd1
vagy .psm1
) fájlokat.
Install-Module
Hatókör paraméterrel rendelkezik, amely lehetővé teszi annak megadását, hogy a modul telepítve van-e az aktuális felhasználóra vagy az összes felhasználóra. További információ: Install-Module.
Alapértelmezés szerint a hozzárendelt $env:PSModulePath
tényleges helyek a következők:
Rendszerszintű helyek: Ezek a mappák a PowerShell-lel szállított modulokat tartalmazzák. Ezek a modulok a
$PSHOME\Modules
mappában vannak tárolva.- Windows rendszeren az AllUsers hatókörben telepített modulok a következő helyen
$env:ProgramFiles\WindowsPowerShell\Modules
vannak tárolva: . - A nem Windows rendszerű rendszereken az AllUsers hatókörben telepített modulok a következő helyen
/usr/local/share/powershell/Modules
vannak tárolva: .
- Windows rendszeren az AllUsers hatókörben telepített modulok a következő helyen
Felhasználó által telepített modulok: Windows rendszeren a CurrentUser hatókörben telepített modulok általában a
$HOME\Documents\WindowsPowerShell\Modules
mappában vannak tárolva. 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étDocuments
a következő paranccsal ellenőrizheti:[Environment]::GetFolderPath('MyDocuments')
.A nem Windows rendszerű rendszereken a CurrentUser hatókörben telepített modulok a
$HOME/.local/share/powershell/Modules
mappában vannak tárolva.Alkalmazásspecifikus modulok: A telepítőprogramok más könyvtárakban, például a Windows mappájában is telepíthetik a
Program Files
modulokat. A telepítőcsomag hozzáfűzheti a helyet a$env:PSModulePath
.
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 akkor használja ezt az értéket, ha létezik egy azonos nevű gépi hatókörű változó.
A PowerShell 7-ben PSModulePath
a rendszer a Path
környezeti változó Windowson való kezeléséhez hasonlóan kezeli. Windows Path
rendszeren a rendszer a többi környezeti változótól eltérően kezeli. 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 definiáltPSModulePath
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 Unix-rendszerek nem különülnek 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 WinPSModulePath
át az értékeket$env:PSModulePath
:
- 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ént való végleges mentésének PSModulePath
elkerülése érdekében 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
nem kibontott sztringek kibontása nélkül adja hozzá az elérési utat a PSModulePath
környezeti változó értékéhez.
$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)
Ha elérési utat szeretne hozzáadni a felhasználói beállításhoz, módosítsa a beállításjegyzék-szolgáltatót HKLM:\
a következőre 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)