about_PSModulePath
Kort beskrivning
Den här artikeln beskriver syftet med och användningen av $env:PSModulePath
miljövariabeln.
Lång beskrivning
Miljövariabeln $env:PSModulePath
innehåller en lista över mappplatser. PowerShell söker rekursivt igenom varje mapp efter modulfiler (.psd1
eller .psm1
).
Som standard är de effektiva platser som tilldelats:$env:PSModulePath
- Moduler som är installerade i CurrentUser-omfånget lagras i
$HOME\Documents\WindowsPowerShell\Modules
. - Moduler som är installerade i AllUsers-omfånget lagras i
$env:ProgramFiles\WindowsPowerShell\Modules
. - Moduler som levereras med Windows PowerShell som lagras i
$PSHOME\Modules
, vilket är$env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
.
PowerShell PSModulePath-konstruktion
Värdet $env:PSModulePath
för konstrueras varje gång PowerShell startar.
Värdet varierar beroende på version av PowerShell och hur du startade det.
Windows PowerShell-start
Windows PowerShell använder följande logik för att skapa PSModulePath
vid start:
- Om
PSModulePath
det inte finns kan du kombinera CurrentUser, AllUsers och$PSHOME
modulernas sökvägar - Om
PSModulePath
finns:- Om
PSModulePath
innehåller$PSHOME
modulsökväg:- Sökvägen för AllUsers-moduler infogas före
$PSHOME
modulsökvägen
- Sökvägen för AllUsers-moduler infogas före
- annars:
PSModulePath
Använd bara som definierat eftersom användaren avsiktligt tog bort platsen$PSHOME
- Om
Modulsökvägen CurrentUser är endast prefix om användaromfånget $env:PSModulePath
inte finns. Annars används användaromfånget $env:PSModulePath
enligt definitionen.
Beteende för modulsökning
PowerShell söker rekursivt igenom varje mapp i PSModulePath efter modulfiler (.psd1
eller .psm1
). Med det här sökmönstret kan flera versioner av samma modul installeras i olika mappar. Till exempel:
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
Som standard läser PowerShell in det högsta versionsnumret för en modul när flera versioner hittas. Om du vill läsa in en specifik version använder du Import-Module
med parametern FullyQualifiedName . Mer information finns i Import-Module.
Ändra PSModulePath
I de flesta fall bör du installera moduler på standardmodulplatserna. Du kan dock behöva ändra värdet för PSModulePath
miljövariabeln.
Om du till exempel tillfälligt vill lägga till katalogen $env:PSModulePath
i C:\Program Files\Fabrikam\Modules
för den aktuella sessionen skriver du:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Om du vill ändra värdet PSModulePath
för i varje session redigerar du registernyckeln som PSModulePath
lagrar värdena. Värdena PSModulePath
lagras i registret som oexpandererade strängar. Om du vill undvika att permanent spara PSModulePath
värdena som expanderade strängar använder du GetValue()
metoden i undernyckeln och redigerar värdet direkt.
I följande exempel läggs C:\Program Files\Fabrikam\Modules
sökvägen till värdet för PSModulePath
miljövariabeln utan att de oexpanderade strängarna expanderas.
$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)
Om du vill lägga till en sökväg till användarinställningen använder du följande kod:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)