Informazioni su PSModulePath

Descrizione breve

Questo articolo descrive lo scopo e l'utilizzo della $env:PSModulePath variabile di ambiente.

Descrizione lunga

La $env:PSModulePath variabile di ambiente contiene un elenco di percorsi delle cartelle. PowerShell cerca in modo ricorsivo ogni cartella per individuare i file del modulo (.psd1 o .psm1).

Per impostazione predefinita, le posizioni effettive assegnate a $env:PSModulePath sono:

  • I moduli installati nell'ambito CurrentUser vengono archiviati in $HOME\Documents\WindowsPowerShell\Modules.
  • I moduli installati nell'ambito AllUsers vengono archiviati in $env:ProgramFiles\WindowsPowerShell\Modules.
  • Moduli forniti con Windows PowerShell archiviati in $PSHOME\Modules, ovvero $env:SystemRoot\System32\WindowsPowerShell\1.0\Modules.

Costruzione di PowerShell PSModulePath

Il valore di $env:PSModulePath viene costruito ogni volta che viene avviato PowerShell. Il valore varia in base alla versione di PowerShell e alla modalità di avvio.

Avvio di Windows PowerShell

Windows PowerShell usa la logica seguente per costruire l'oggetto all'avvio PSModulePath :

  • Se PSModulePath non esiste, combinare CurrentUser, AllUsers e i percorsi dei $PSHOME moduli
  • Se PSModulePath esiste:
    • Se PSModulePath contiene $PSHOME il percorso dei moduli:
      • Il percorso dei moduli AllUsers viene inserito prima $PSHOME del percorso dei moduli
    • altro:
      • PSModulePath Usare semplicemente come definito perché l'utente ha rimosso deliberatamente la $PSHOME posizione

Il percorso del modulo CurrentUser è preceduto solo se l'ambito $env:PSModulePath utente non esiste. In caso contrario, l'ambito $env:PSModulePath utente viene usato come definito.

Comportamento di ricerca del modulo

PowerShell esegue una ricerca ricorsiva in ogni cartella nei file del modulo (.psd1 o .psm1) di PSModulePath. Questo modello di ricerca consente l'installazione di più versioni dello stesso modulo in cartelle diverse. Ad esempio:

    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

Per impostazione predefinita, PowerShell carica il numero di versione più alto di un modulo quando vengono trovate più versioni. Per caricare una versione specifica, usare Import-Module con il parametro FullyQualifiedName . Per altre informazioni, vedere Import-Module.

Modifica di PSModulePath

Per la maggior parte delle situazioni, è consigliabile installare i moduli nelle posizioni predefinite del modulo. Potrebbe tuttavia essere necessario modificare il valore della PSModulePath variabile di ambiente.

Ad esempio, per aggiungere temporaneamente la C:\Program Files\Fabrikam\Modules directory a $env:PSModulePath per la sessione corrente, digitare:

$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"

Per modificare il valore di PSModulePath in ogni sessione, modificare la chiave del Registro di sistema che archivia i PSModulePath valori. I PSModulePath valori vengono archiviati nel Registro di sistema come stringhe non espanse . Per evitare di salvare in modo permanente i PSModulePath valori come stringhe espanse , usare il GetValue() metodo nella sottochiave e modificare direttamente il valore.

Nell'esempio seguente viene aggiunto il C:\Program Files\Fabrikam\Modules percorso al valore della variabile di PSModulePath ambiente senza espandere le stringhe non espanse.

$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)

Per aggiungere un percorso all'impostazione utente, usare il codice seguente:

$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)

Vedi anche