Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Breve descrizione
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
PSModulePathnon esiste, combinare CurrentUser, AllUsers e i percorsi dei$PSHOMEmoduli - Se
PSModulePathesiste:- Se
PSModulePathcontiene$PSHOMEil percorso dei moduli:-
Il percorso dei moduli AllUsers viene inserito prima
$PSHOMEdel percorso dei moduli
-
Il percorso dei moduli AllUsers viene inserito prima
- altro:
-
PSModulePathUsare semplicemente come definito perché l'utente ha rimosso deliberatamente la$PSHOMEposizione
-
- 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.
Note
Quando Windows PowerShell viene eseguito in un albero dei processi che contiene PowerShell 7, può ereditare un PSModulePath valore che include i percorsi dei moduli di PowerShell 7. PowerShell 7 rimuove i propri percorsi di modulo all'avvio diretto Windows PowerShell, ma non quando Windows PowerShell viene avviato tramite un processo intermedio. I percorsi dei moduli di PowerShell 7 ereditati precedono il percorso del modulo di sistema di PowerShell Windows, che può causare il caricamento dei nomi dei moduli condivisi, ad esempio Microsoft.PowerShell.Utility, per risolvere le versioni del modulo di PowerShell 7 che Windows PowerShell non è in grado di caricare. Questo interrompe il caricamento automatico del modulo. Per altre informazioni e soluzioni alternative, vedere la versione di PowerShell 7 di questo articolo.
Comportamento di ricerca del modulo
PowerShell esegue una ricerca ricorsiva in ogni cartella nei file del modulo ( o .psd1) di .psm1. 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)