Dela via


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
    • annars:
      • PSModulePath Använd bara som definierat eftersom användaren avsiktligt tog bort platsen $PSHOME

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)

Se även