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 di cartelle in cui viene eseguita la ricerca per trovare moduli e risorse. PowerShell cerca in modo ricorsivo ogni cartella per individuare i file del modulo (.psd1
o .psm1
).
Install-Module
ha un parametro Scope che consente di specificare se il modulo è installato per l'utente corrente o per tutti gli utenti. Per altre informazioni, vedere Install-Module.
Per impostazione predefinita, le posizioni effettive assegnate a $env:PSModulePath
sono:
Percorsi a livello di sistema: queste cartelle contengono moduli forniti con PowerShell. Questi moduli vengono archiviati nella
$PSHOME\Modules
cartella .- In Windows i moduli installati nell'ambito AllUsers vengono archiviati in
$env:ProgramFiles\WindowsPowerShell\Modules
. - Nei sistemi non Windows, i moduli installati nell'ambito AllUsers vengono archiviati in
/usr/local/share/powershell/Modules
.
- In Windows i moduli installati nell'ambito AllUsers vengono archiviati in
Moduli installati dall'utente: in Windows i moduli installati nell'ambito CurrentUser vengono in genere archiviati nella
$HOME\Documents\WindowsPowerShell\Modules
cartella . Il percorso specifico dellaDocuments
cartella varia in base alla versione di Windows e quando si usa il reindirizzamento delle cartelle. Inoltre, Microsoft OneDrive può modificare il percorso dellaDocuments
cartella. È possibile verificare il percorso dellaDocuments
cartella usando il comando seguente:[Environment]::GetFolderPath('MyDocuments')
.Nei sistemi non Windows i moduli installati nell'ambito CurrentUser vengono archiviati nella
$HOME/.local/share/powershell/Modules
cartella .Moduli specifici dell'applicazione: i programmi di installazione possono installare moduli in altre directory, ad esempio la
Program Files
cartella in Windows. Il pacchetto del programma di installazione può o meno accodare il percorso a$env:PSModulePath
.
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.
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 se esiste una variabile con ambito computer con lo stesso nome.
In PowerShell 7 viene PSModulePath
trattato in modo simile al modo in cui la Path
variabile di ambiente viene gestita in Windows. In Windows viene Path
gestito in modo diverso da altre variabili di ambiente. Quando viene avviato un processo, Windows combina l'ambito Path
utente con l'ambito Path
computer.
- Recuperare l'ambito utente
PSModulePath
- Confronto con la variabile di ambiente ereditata dal
PSModulePath
processo- Se lo stesso:
- Aggiungere AllUsers
PSModulePath
alla fine seguendo la semantica dellaPath
variabile di ambiente - Il percorso di Windows
System32
proviene dal computer definitoPSModulePath
in modo da non dover essere aggiunto 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
$PSHOME
percorsi in tale ordine- Se
powershell.config.json
contiene un utente con ambitoPSModulePath
, usare questo anziché l'impostazione predefinita per l'utente - Se
powershell.config.json
contiene un ambito di sistemaPSModulePath
, usare tale valore anziché il valore predefinito per il sistema
- Se
I sistemi Unix 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
$PSHOME
modulo
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 (.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. Tuttavia, potrebbe 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 , utilizzare il metodo GetValue 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').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Per aggiungere un percorso all'impostazione utente, modificare il provider del Registro di sistema da HKLM:\
a HKCU:\
.
$key = (Get-Item 'HKCU:\').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per