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