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:
- Moduli installati nell'ambito CurrentUser :
- In Windows questi moduli vengono archiviati in
$HOME\Documents\PowerShell\Modules. Il percorso specifico dellaDocumentscartella varia in base alla versione di Windows e quando si usa il reindirizzamento delle cartelle. Inoltre, Microsoft OneDrive può modificare il percorso dellaDocumentscartella. Per verificare il percorso dellaDocumentscartella, eseguire il comando seguente:[Environment]::GetFolderPath('MyDocuments'). - Nei sistemi non Windows questi moduli vengono archiviati nella
$HOME/.local/share/powershell/Modulescartella .
- In Windows questi moduli vengono archiviati in
- Moduli installati nell'ambito AllUsers :
- In Windows questi moduli vengono archiviati in
$Env:ProgramFiles\PowerShell\Modules. - Nei sistemi non Windows, questi moduli vengono archiviati in
/usr/local/share/powershell/Modules.
- In Windows questi moduli vengono archiviati in
- I moduli forniti con PowerShell vengono archiviati in
$PSHOME\Modules.
Nota
Le applicazioni che includono moduli di PowerShell possono installare moduli in altre directory in Windows, ad esempio la Program Files cartella . Il pacchetto del programma di installazione potrebbe non aggiungere il percorso a $Env:PSModulePath.
I percorsi predefiniti per Windows PowerShell 5.1 sono diversi da PowerShell 7.
- 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.
Avvio di PowerShell 7
In Windows, per la maggior parte delle variabili di ambiente, se la variabile con ambito utente esiste, un nuovo processo usa tale valore solo, anche quando esiste una variabile con ambito computer con lo stesso nome. Le variabili di ambiente del percorso vengono trattate in modo diverso.
In Windows viene PSModulePath trattato in modo simile al modo in cui viene gestita la Path variabile di ambiente.
Path viene trattato in modo diverso da altre variabili di ambiente. Quando viene avviato un processo, Windows combina l'ambito Path utente con l'ambito Pathcomputer.
- Recuperare l'ambito utente
PSModulePath - Confronto con la variabile di ambiente ereditata dal
PSModulePathprocesso- Se lo stesso:
-
Aggiungere AllUsers
PSModulePathalla fine seguendo la semantica dellaPATHvariabile di ambiente - Il percorso di Windows
System32proviene dal computer definitoPSModulePath, quindi non è necessario aggiungere in modo esplicito
-
Aggiungere AllUsers
- Se diverso, considerare come se l'utente lo modificasse in modo esplicito e non accoda AllUsers
PSModulePath
- Se lo stesso:
- Prefisso con PS7 User, System e
$PSHOMEpercorsi in tale ordine- Se
powershell.config.jsoncontiene un utente con ambitoPSModulePath, usare questo anziché l'impostazione predefinita per l'utente - Se
powershell.config.jsoncontiene un ambito di sistemaPSModulePath, usare tale valore anziché il valore predefinito per il sistema
- Se
I sistemi non Windows non hanno una separazione delle variabili di ambiente utente e di sistema.
PSModulePath viene ereditato e i percorsi specifici di PS7 sono preceduti da un prefisso se non è già definito.
Avvio di Windows PowerShell da PowerShell 7
Per questa discussione, Windows PowerShell indica sia powershell.exe che powershell_ise.exe.
Il valore di $Env:PSModulePath viene copiato in WinPSModulePath con le modifiche seguenti:
- Rimuovere PS7 il percorso del modulo Utente
- Rimuovere PS7 il percorso del modulo di sistema
- Rimuovere PS7 il percorso del
$PSHOMEmodulo
I percorsi PS7 vengono rimossi in modo che i moduli PS7 non vengano caricati in Windows PowerShell. Il WinPSModulePath valore viene usato quando si avvia Windows PowerShell.
Avvio di PowerShell 7 da Windows PowerShell
L'avvio di PowerShell 7 continua così come avviene con l'aggiunta dell'aggiunta di percorsi ereditati da Windows PowerShell. Poiché i percorsi specifici di PS7 sono preceduti da un prefisso, non esiste alcun problema funzionale.
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"
Il punto e virgola (;) nel comando separa il nuovo percorso dal percorso che lo precede nell'elenco. Nelle piattaforme non Windows i due punti (:) separano i percorsi del percorso nella variabile di ambiente.
Modifica di PSModulePath in non Windows
Per modificare il valore di PSModulePath per ogni sessione in un ambiente non Windows, aggiungere il comando precedente al profilo di PowerShell.
Modifica di PSModulePath in Windows
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)