Share via


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 . Si tratta anche del percorso in cui sono installati i moduli di gestione di Windows.

    I moduli installati nell'ambito AllUsers vengono archiviati in $env:ProgramFiles\WindowsPowerShell\Modules.

  • Moduli installati dall'utente: si tratta di moduli installati nell'ambito CurrentUser . Il percorso dell'ambito CurrentUser è in genere la $HOME\Documents\WindowsPowerShell\Modules cartella . Il percorso specifico della Documents cartella varia in base alla versione di Windows e quando si usa il reindirizzamento delle cartelle. Inoltre, Microsoft OneDrive può modificare il percorso della Documents cartella. È possibile verificare il percorso della Documents cartella usando il comando seguente: [Environment]::GetFolderPath('MyDocuments').

  • Moduli specifici dell'applicazione: i programmi di installazione possono installare moduli in altre directory, ad esempio la Program Files directory. Il programma di installazione può aggiungere il percorso dell'applicazione al valore di $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
    • Altro:
      • PSModulePath Usare semplicemente come definito perché l'utente ha rimosso deliberatamente la $PSHOME posizione

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

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