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 som söks efter moduler och resurser. PowerShell söker rekursivt igenom varje mapp efter modulfiler (.psd1
eller .psm1
).
Install-Module
har en omfångsparameter som gör att du kan ange om modulen är installerad för den aktuella användaren eller för alla användare. Mer information finns i Installera modul.
Som standard är de effektiva platser som tilldelats:$env:PSModulePath
Systemomfattande platser: Dessa mappar innehåller moduler som levereras med PowerShell. De här modulerna lagras i
$PSHOME\Modules
mappen. Det här är också den plats där Windows-hanteringsmodulerna är installerade.Moduler som är installerade i AllUsers-omfånget lagras i
$env:ProgramFiles\WindowsPowerShell\Modules
.Användarinstallerade moduler: Det här är moduler som är installerade i CurrentUser-omfånget . Platsen för CurrentUser-omfånget
$HOME\Documents\WindowsPowerShell\Modules
är vanligtvis mappen. Den specifika platsen för mappen varierar beroende påDocuments
version av Windows och när du använder mappomdirigering. Dessutom kan Microsoft OneDrive ändra platsen för dinDocuments
mapp. Du kan kontrollera platsen för mappenDocuments
med hjälp av följande kommando:[Environment]::GetFolderPath('MyDocuments')
.Programspecifika moduler: Installationsprogram kan installera moduler i andra kataloger, till exempel
Program Files
katalogen. Installationsprogrammet kan lägga till programplatsen till värdet$env:PSModulePath
för .
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 det startas.
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
- Annat:
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 metoden GetValue 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 expandera de icke-expanderade strängarna.
$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)
Om du vill lägga till en sökväg till användarinställningen ändrar du registerprovidern från HKLM:\
till 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)
Se även
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för