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
- Il percorso dei moduli AllUsers viene inserito prima
- altro:
PSModulePath
Usare semplicemente come definito perché l'utente ha rimosso deliberatamente la$PSHOME
posizione
- Se
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)