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
Descrive come accedere e gestire le variabili di ambiente in PowerShell.
Descrizione lunga
Le variabili di ambiente archiviano i dati usati dal sistema operativo e da altri programmi. PowerShell crea le variabili di ambiente seguenti:
POWERSHELL_TELEMETRY_OPTOUTPOWERSHELL_DISTRIBUTION_CHANNELPOWERSHELL_UPDATECHECKPOWERSHELL_DIAGNOSTICS_OPTOUTPSExecutionPolicyPreferencePSModulePathPSModuleAnalysisCachePathPSDisableModuleAnalysisCacheCleanup
Per le descrizioni complete di queste variabili, vedere le variabili di ambiente di PowerShell di questo articolo.
PowerShell può accedere e gestire le variabili di ambiente in una qualsiasi delle piattaforme del sistema operativo supportate. Il provider di ambiente PowerShell consente di ottenere, aggiungere, modificare, cancellare ed eliminare le variabili di ambiente nella console corrente.
Nota
A differenza di Windows, i nomi delle variabili di ambiente in macOS e Linux fanno distinzione tra maiuscole e minuscole. Ad esempio, $Env:Path e $Env:PATH sono variabili di ambiente diverse nelle piattaforme non Windows.
Le variabili di ambiente, a differenza di altri tipi di variabili in PowerShell, vengono sempre archiviate come stringhe. A differenza di altre variabili, inoltre, vengono ereditate dai processi figlio, come i processi in background locali e le sessioni in cui operano i membri del modulo. In questo modo, le variabili di ambiente sono particolarmente adatte all'archiviazione dei valori necessari nei processi padre e figlio.
In Windows le variabili di ambiente possono essere definite in tre ambiti:
- Ambito macchina (o sistema)
- Ambito dell'utente
- Ambito del processo
L'ambito processo
Quando si modificano le variabili di ambiente in PowerShell, la modifica influisce solo sulla sessione corrente. Questo comportamento è simile al comportamento del comando set nella shell dei comandi di Windows e al comando setenv negli ambienti basati su Unix. Per modificare i valori negli ambiti Machine o User, è necessario usare i metodi della classe System.Environment.
Per apportare modifiche alle variabili a livello di macchina, è necessario disporre anche dell'autorizzazione. Se si tenta di modificare un valore senza autorizzazioni sufficienti, il comando non riesce e PowerShell visualizza un errore.
PowerShell offre diversi metodi per l'uso e la gestione delle variabili di ambiente.
- Sintassi della variabile
- I provider dell'ambiente e i cmdlet degli elementi
- Classe di System.Environment
.NET
Usare la sintassi delle variabili
È possibile visualizzare e modificare i valori delle variabili di ambiente con la sintassi seguente:
$Env:<variable-name>
Ad esempio, per visualizzare il valore della variabile di ambiente windir:
$Env:windir
C:\Windows
In questa sintassi, il segno di dollaro ($) indica una variabile e il nome dell'unità (Env:) indica una variabile di ambiente seguita dal nome della variabile (windir).
È possibile creare e aggiornare il valore delle variabili di ambiente con la sintassi seguente:
$Env:<variable-name> = "<new-value>"
Ad esempio, per creare la variabile di ambiente Foo:
$Env:Foo = 'An example'
Poiché le variabili di ambiente sono sempre stringhe, è possibile usarle come qualsiasi altra variabile contenente una stringa. Per esempio:
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
A partire da PowerShell 7.5, è possibile impostare una variabile di ambiente su una stringa vuota. L'impostazione di una variabile di ambiente per $null rimuoverla dalla sessione corrente. Per esempio:
PS> $env:TEST = ''
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST
PS> $env:TEST = $null
PS> $env:TEST.Length
0
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
Per altre informazioni sulle variabili in PowerShell, vedere about_Variables.
Usare il provider Environment e i cmdlet Item
Il provider di ambiente di di PowerShell offre un'interfaccia per interagire con le variabili di ambiente in un formato simile a un'unità disco del file system. Consente di ottenere, aggiungere, modificare, cancellare ed eliminare variabili di ambiente e valori in PowerShell.
Ad esempio, per creare la variabile di ambiente Foo con il valore Bar:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
È anche possibile copiare la variabile di ambiente con Copy-Item, impostare il valore di una variabile di ambiente con Set-Item, elencare le variabili di ambiente con Get-Itemed eliminare la variabile di ambiente con Remove-Item.
Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
Usare il cmdlet Get-ChildItem per visualizzare un elenco completo delle variabili di ambiente:
Get-ChildItem Env:
A partire da PowerShell 7.5, è possibile impostare una variabile di ambiente su una stringa vuota usando il provider di ambiente e Set-Item il cmdlet. L'impostazione di una variabile di ambiente per $null rimuoverla dalla sessione corrente. Per esempio:
PS> Set-Item env:TEST 'Foo'
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST Foo
PS> Set-Item env:TEST ''
PS> Get-ChildItem env:TEST
Name Value
---- -----
TEST
PS> Set-Item -Path env:TEST -Value $null
PS> Get-ChildItem env:TEST
Get-ChildItem: Cannot find path 'TEST' because it does not exist.
Per ulteriori informazioni sull'uso del provider Environment per gestire le variabili di ambiente, vedere about_Environment_Provider.
Usare i metodi System.Environment
La classe System.Environment
Nell'esempio seguente viene creata una nuova variabile di ambiente, Foo, con un valore Bar e quindi ne restituisce il valore.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
A partire da PowerShell 7.5, è possibile impostare una variabile di ambiente su una stringa vuota usando il SetEnvironmentVariable() metodo e specificando una stringa vuota o $null per il valore della variabile. Per esempio:
PS> [Environment]::SetEnvironmentVariable('Foo','Bar')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo Bar
PS> [Environment]::SetEnvironmentVariable('Foo','')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo
PS> [Environment]::SetEnvironmentVariable('Foo','bar')
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo bar
PS> [Environment]::SetEnvironmentVariable('Foo',$null)
PS> Get-ChildItem env:Foo
Name Value
---- -----
Foo
Nota
A differenza della sintassi delle variabili e dei casi del provider, l'assegnazione del valore a $null tramite il SetEnvironmentVariable() metodo non rimuove la variabile di ambiente.
Per ulteriori informazioni sui metodi della classe System.Environment, vedere Environment Methods.
Creare variabili di ambiente persistenti in Windows
In Windows sono disponibili tre metodi per apportare una modifica permanente a una variabile di ambiente:
- Impostarli nel profilo
- Utilizzo del metodo
SetEnvironmentVariable() - Usare il Pannello di controllo del sistema
Impostare le variabili di ambiente nel profilo
Qualsiasi variabile di ambiente aggiunta o modificata nel profilo di PowerShell è disponibile in qualsiasi sessione che carica il profilo. Questo metodo funziona per qualsiasi versione di PowerShell in qualsiasi piattaforma supportata.
Ad esempio, per creare la variabile di ambiente CompanyUri e aggiornare la variabile di ambiente PATH per includere la cartella C:\Tools, aggiungere le righe seguenti al profilo di PowerShell:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:PATH += ';C:\Tools'
Nota
In Linux o macOS i due punti (:) vengono usati invece di un punto e virgola(;) per separare un nuovo percorso dal percorso che lo precede nell'elenco.
È possibile ottenere il percorso del profilo di PowerShell con la variabile automatica $PROFILE. Per altre informazioni sui profili, vedere about_Profiles.
Impostare le variabili di ambiente con SetEnvironmentVariable()
In Windows è possibile specificare un ambito per il metodo SetEnvironmentVariable() come terzo parametro per impostare la variabile di ambiente in tale ambito. Gli ambiti del computer e dell'utente vengono mantenuti all'esterno del processo corrente, consentendo di salvare una variabile di ambiente nuova o modificata.
Ad esempio, per salvare una nuova variabile di ambiente Foo con il valore Barnell'ambito della macchina:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
È possibile eliminare una variabile di ambiente dall'ambito utente o computer impostando il valore della variabile su una stringa vuota.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Impostare le variabili di ambiente nel Pannello di controllo di sistema
Nel Pannello di controllo del sistema è possibile aggiungere o modificare variabili di ambiente esistenti negli ambiti User e System (Machine). Windows scrive questi valori nel Registro di sistema in modo che vengano mantenuti tra sessioni e riavvii di sistema.
Per apportare una modifica permanente a una variabile di ambiente in Windows tramite il Pannello di controllo di sistema:
- Aprire il Pannello di controllo di sistema.
- Selezionare System.
- Selezionare Impostazioni di sistema avanzate.
- Passare alla scheda avanzata .
- Selezionare Variabili di ambiente....
- Apportare le modifiche.
Creare variabili di ambiente persistenti in piattaforme non Windows
Linux e macOS hanno file di configurazione e script usati dal sistema operativo per impostare le variabili di ambiente prima di avviare un'applicazione.
Quando si esegue PowerShell come shell predefinita (account di accesso), è possibile definire le variabili di ambiente nei file di inizializzazione globale supportati dal sistema operativo. Ad esempio in Linux, è possibile aggiungere variabili di ambiente al file /etc/environment o creare uno script che imposta le variabili di ambiente e inserirlo nella cartella /etc/profile.d. In macOS è possibile aggiungere variabili di ambiente al file /etc/profile.
Quando si avvia PowerShell da un'altra shell, è possibile definire le variabili di ambiente nei file di inizializzazione specifici della shell usati da shell non di accesso, ad esempio ~/.bashrc per bash o ~/.zshrc per zsh.
Per altre informazioni, vedere la documentazione relativa al sistema operativo e alla shell predefinita.
Variabili di ambiente di PowerShell
Le funzionalità di PowerShell possono usare le variabili di ambiente per archiviare le preferenze utente. Queste variabili funzionano come le variabili di preferenza, ma vengono ereditate dalle sessioni figlio delle sessioni in cui sono state create. Per altre informazioni sulle variabili di preferenza, vedere about_Preference_Variables.
Le variabili di ambiente che archiviano le preferenze includono:
POWERSHELL_TELEMETRY_OPTOUTPer rifiutare esplicitamente i dati di telemetria, impostare la variabile di ambiente su
true,yeso1. Per altre informazioni, vedere about_Telemetry.Affinché questa variabile di ambiente abbia effetto, è necessario impostarla prima di avviare il processo di PowerShell. Per informazioni sulla creazione di variabili di ambiente persistenti, vedere le sezioni precedenti.
POWERSHELL_DISTRIBUTION_CHANNELA partire da PowerShell 7.2, questa variabile di ambiente viene impostata dai pacchetti del programma di installazione per registrare il metodo e l'origine dell'installazione per PowerShell.
Queste informazioni sono incluse nei dati di telemetria inviati a Microsoft. Gli utenti non devono modificare questo valore.
POWERSHELL_UPDATECHECKIl comportamento delle notifiche di aggiornamento può essere modificato usando la variabile di ambiente
POWERSHELL_UPDATECHECK. Per altre informazioni, vedere about_Update_Notifications.Sono supportati i valori seguenti:
-
Offdisattiva la funzionalità di notifica degli aggiornamenti -
Defaultequivale a non definirePOWERSHELL_UPDATECHECK:- Le versioni GA segnalano aggiornamenti alle versioni GA
- Le versioni di anteprima/RC notificano gli aggiornamenti alle versioni di disponibilità generale e anteprima
-
LTSnotifica solo aggiornamenti alle versioni a disponibilità generale (GA) per la manutenzione a lungo termine (LTS)
Prima di avviare il processo di PowerShell, è necessario impostare valori non predefiniti della variabile di ambiente. Per informazioni sulla creazione di variabili di ambiente persistenti, vedere le sezioni precedenti.
-
POWERSHELL_DIAGNOSTICS_OPTOUTQuesta variabile di ambiente è stata aggiunta in PowerShell 7.6-preview.5. Per impostazione predefinita, PowerShell crea una named pipe usata per la comunicazione interprocesso (IPC), ad esempio
Enter-PSHostProcess. PowerShell crea la named pipe all'avvio in modo che sia disponibile per l'uso quando necessario.Nelle piattaforme non Windows, le named pipe vengono implementate come file nella
/tmpcartella . Se PowerShell si arresta in modo anomalo, questi file potrebbero non essere eliminati. Nel corso del tempo, questi file possono accumularsi.A partire da PowerShell 7.6,
POWERSHELL_DIAGNOSTICS_OPTOUTè impostato sufalse. Per disattivare la creazione della named pipe, impostare la variabile di ambiente sutrue,yeso1.PSExecutionPolicyPreferenceArchivia i criteri di esecuzione impostati per la sessione corrente. Questa variabile di ambiente esiste solo quando si impostano criteri di esecuzione per una singola sessione. È possibile eseguire questa operazione in due modi diversi.
Avviare una sessione dalla riga di comando usando il parametro ExecutionPolicy per impostare i criteri di esecuzione per la sessione.
Usare il cmdlet
Set-ExecutionPolicy. Utilizzare il parametro Scope con un valore diProcess.Impostare manualmente la variabile di ambiente. La modifica del valore di questa variabile modifica i criteri di esecuzione del processo corrente.
Queste informazioni si applicano solo alla piattaforma Windows. Per altre informazioni, vedere about_Execution_Policies.
PSModulePathLa variabile di ambiente
$Env:PSModulePathcontiene un elenco di percorsi delle cartelle in cui viene eseguita la ricerca per trovare moduli e risorse. In Windows l'elenco dei percorsi delle cartelle è separato dal carattere punto e virgola (;). Nelle piattaforme non Windows i due punti (:) separano i percorsi delle cartelle nella variabile di ambiente.Per impostazione predefinita, le posizioni effettive assegnate a
$Env:PSModulePathsono:Percorsi a livello di sistema: queste cartelle contengono moduli forniti con PowerShell. I moduli vengono archiviati nella posizione
$PSHOME\Modules. Si tratta inoltre del percorso in cui sono installati i moduli di gestione di Windows.Moduli installati dall'utente: si tratta di moduli installati dall'utente.
Install-Moduleha 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.- In Windows, il percorso dell'ambito di CurrentUser specifico dell'utente è la cartella
$HOME\Documents\PowerShell\Modules. L'ubicazione dell'ambito AllUsers è$Env:ProgramFiles\PowerShell\Modules. - Nei sistemi non Windows, il percorso dell'ambito specifico dell'utente CurrentUser è la cartella
$HOME/.local/share/powershell/Modules. L'ubicazione dell'ambito AllUsers è/usr/local/share/powershell/Modules.
- In Windows, il percorso dell'ambito di CurrentUser specifico dell'utente è la cartella
Inoltre, i programmi di installazione che installano moduli in altre directory, ad esempio la directory Programmi, possono accodare i percorsi al valore di
$Env:PSModulePath.Per altre informazioni, vedere about_PSModulePath.
PSModuleAnalysisCachePathPowerShell fornisce il controllo sul file usato per memorizzare nella cache i dati relativi ai moduli e ai relativi cmdlet. La cache viene letta all'avvio durante la ricerca di un comando e viene scritta in un thread in background qualche volta dopo l'importazione di un modulo.
Il percorso predefinito della cache è:
- Windows PowerShell 5.1:
$Env:LOCALAPPDATA\Microsoft\Windows\PowerShell - PowerShell 6.0 e versioni successive:
$Env:LOCALAPPDATA\Microsoft\PowerShell - Impostazione predefinita non Windows:
~/.cache/powershell
Il nome file predefinito per la cache è
ModuleAnalysisCache. Quando sono installate più istanze di PowerShell, il nome file include un suffisso esadecimale in modo che sia presente un nome file univoco per ogni installazione.Nota
Se l'individuazione dei comandi non funziona correttamente, ad esempio IntelliSense mostra i comandi che non esistono, è possibile eliminare il file della cache. La cache viene ricreata al successivo avvio di PowerShell.
Per modificare il percorso predefinito della cache, impostare la variabile di ambiente prima di avviare PowerShell. Il valore deve denominare un percorso completo (incluso il nome file) che PowerShell ha l'autorizzazione per creare e scrivere file.
Le modifiche apportate a questa variabile di ambiente influiscono solo sui processi figlio. Per informazioni sulla creazione di variabili di ambiente persistenti, vedere le sezioni precedenti.
Per disabilitare la cache dei file, imposta questo valore su un percorso non valido, ad esempio:
# `NUL` here is a special device on Windows that can't be written to, # on non-Windows you would use `/dev/null` $Env:PSModuleAnalysisCachePath = 'NUL'In questo modo viene impostato il percorso verso il dispositivo NUL. PowerShell non può scrivere nel percorso, ma non viene restituito alcun errore. È possibile visualizzare gli errori segnalati usando una traccia:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanupQuando si scrive la cache di analisi dei moduli, PowerShell verifica la presenza di moduli che non esistono più per evitare una cache inutilmente di grandi dimensioni. In alcuni casi questi controlli non sono auspicabili, nel qual caso è possibile disattivarli impostando questo valore della variabile di ambiente su
1.L'impostazione di questa variabile di ambiente ha effetto per gli eventi di pulizia successivi nel processo corrente. Per assicurarsi che la pulizia sia disabilitata all'avvio, è necessario impostare la variabile di ambiente prima di avviare PowerShell. Per informazioni sulla creazione di variabili di ambiente persistenti, vedere le sezioni precedenti.
Altre variabili di ambiente usate da PowerShell
Informazioni sul percorso
PATHLa variabile di ambiente
$Env:PATHcontiene un elenco di percorsi di cartelle cercati dal sistema operativo per i file eseguibili. In Windows l'elenco dei percorsi delle cartelle è separato dal carattere punto e virgola (;). Nelle piattaforme non Windows i due punti (:) separano i percorsi delle cartelle nella variabile di ambiente.PATHEXTLa variabile
$Env:PATHEXTcontiene un elenco di estensioni di file che Windows considera come file eseguibili. Quando un file di script con una delle estensioni elencate viene eseguito da PowerShell, lo script viene eseguito nella console o nella sessione del terminale corrente. Se l'estensione del file non è elencata, lo script viene eseguito in una nuova sessione della console.Per assicurarsi che gli script per un altro linguaggio di scripting vengano eseguiti nella sessione della console corrente, aggiungere l'estensione di file usata dal linguaggio di scripting. Ad esempio, per eseguire script Python nella console corrente, aggiungere l'estensione
.pyalla variabile di ambiente. Affinché Windows supporti l'estensione.pycome file eseguibile, è necessario registrare l'estensione di file usando i comandiftypeeassocdella shell dei comandi CMD. PowerShell non dispone di metodi diretti per registrare il gestore di file. Per altre informazioni, vedere la documentazione relativa al comando ftype. Gli script di PowerShell iniziano sempre nella sessione della console corrente. Non è necessario aggiungere l'estensione
.ps1.variabili
XDGNelle piattaforme non Windows PowerShell usa le variabili di ambiente XDG seguenti, come definito dalla specifica della directory di base XDG .
XDG_CONFIG_HOMEXDG_DATA_HOMEXDG_CACHE_HOME
Funzionalità del terminale
A partire da PowerShell 7.2, è possibile usare le variabili di ambiente seguenti per controllare le funzionalità del terminale virtuale come sequenze di escape ANSI che colorizzano l'output. Il supporto per le sequenze di escape ANSI può essere disattivato usando le variabili di ambiente TERM o NO_COLOR.
TERMI valori seguenti di
$Env:TERMmodificano il comportamento come segue:-
dumb: imposta$Host.UI.SupportsVirtualTerminal = $false -
xterm-mono: imposta$PSStyle.OutputRendering = PlainText -
xterm: imposta$PSStyle.OutputRendering = PlainText
-
NO_COLORSe
$Env:NO_COLOResiste,$PSStyle.OutputRenderingè impostato suPlainText. Per altre informazioni sulla variabile di ambienteNO_COLOR, vedere https://no-color.org/.