Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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\Moduleswel .
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
PSModulePathdit niet bestaat, combineert u CurrentUser, AllUsers en de$PSHOMEmodulespaden - Als
PSModulePathdit wel bestaat:- Als
PSModulePathdit pad naar modules bevat$PSHOME:-
Pad naar AllUsers-modules wordt ingevoegd vóór
$PSHOMEhet pad naar modules
-
Pad naar AllUsers-modules wordt ingevoegd vóór
- anders:
-
PSModulePathGebruik 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)