about_PSModulePath
Korte beschrijving
In dit artikel worden het doel en het gebruik van de $env:PSModulePath
omgevingsvariabele beschreven.
Lange beschrijving
De $env:PSModulePath
omgevingsvariabele bevat een lijst met maplocaties. PowerShell doorzoekt recursief elke map naar modulebestanden (.psd1
of .psm1
) bestanden.
De effectieve locaties waaraan is toegewezen $env:PSModulePath
, zijn standaard:
- Modules die zijn geïnstalleerd in het bereik CurrentUser , worden opgeslagen in
$HOME\Documents\WindowsPowerShell\Modules
. - Modules die zijn geïnstalleerd in het bereik AllUsers , worden opgeslagen in
$env:ProgramFiles\WindowsPowerShell\Modules
. - Modules die worden verzonden met Windows PowerShell die zijn opgeslagen in
$PSHOME\Modules
, dat wil$env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
wel .
PowerShell PSModulePath-constructie
De waarde van $env:PSModulePath
wordt telkens wanneer PowerShell wordt gestart, samengesteld.
De waarde verschilt per versie van PowerShell en hoe u deze hebt gestart.
Windows PowerShell opstarten
Windows PowerShell gebruikt de volgende logica om de PSModulePath
opstartfunctie samen te stellen:
- Als
PSModulePath
dit niet bestaat, combineert u CurrentUser, AllUsers en de$PSHOME
modulespaden - Als
PSModulePath
dit wel bestaat:- Als
PSModulePath
dit pad naar modules bevat$PSHOME
:-
Pad naar AllUsers-modules wordt ingevoegd vóór
$PSHOME
het pad naar modules
-
Pad naar AllUsers-modules wordt ingevoegd vóór
- anders:
-
PSModulePath
Gebruik gewoon zoals gedefinieerd omdat de gebruiker de locatie opzettelijk heeft verwijderd$PSHOME
-
- Als
Het pad van de CurrentUser-module wordt alleen voorafgegaan als het gebruikersbereik $env:PSModulePath
niet bestaat. Anders wordt het gebruikersbereik $env:PSModulePath
gebruikt zoals gedefinieerd.
Zoekgedrag van module
PowerShell doorzoekt recursief elke map in de PSModulePath naar modulebestanden (.psd1
of .psm1
) bestanden. Met dit zoekpatroon kunnen meerdere versies van dezelfde module in verschillende mappen worden geïnstalleerd. Voorbeeld:
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 laadt standaard het hoogste versienummer van een module wanneer er meerdere versies worden gevonden. Als u een specifieke versie wilt laden, gebruikt Import-Module
u deze met de parameter FullyQualifiedName . Zie Import-Module voor meer informatie.
PSModulePath wijzigen
In de meeste gevallen moet u modules installeren op de standaardmodulelocaties. Mogelijk moet u echter de waarde van de PSModulePath
omgevingsvariabele wijzigen.
Als u bijvoorbeeld tijdelijk de C:\Program Files\Fabrikam\Modules
map wilt toevoegen aan $env:PSModulePath
de huidige sessie, typt u:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Als u de waarde van PSModulePath
elke sessie wilt wijzigen, bewerkt u de registersleutel die de PSModulePath
waarden opslaat. De PSModulePath
waarden worden in het register opgeslagen als niet-uitgevouwen tekenreeksen. Als u wilt voorkomen dat de PSModulePath
waarden permanent worden opgeslagen als uitgebreide tekenreeksen, gebruikt u de GetValue()
methode op de subsleutel en bewerkt u de waarde rechtstreeks.
In het volgende voorbeeld wordt het C:\Program Files\Fabrikam\Modules
pad toegevoegd aan de waarde van de PSModulePath
omgevingsvariabele zonder de niet-uitgevouwen tekenreeksen uit te vouwen.
$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)
Gebruik de volgende code om een pad naar de gebruikersinstelling toe te voegen:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)