Condividi tramite


about_Environment_Variables

Breve descrizione

Descrive come accedere e gestire le variabili di ambiente in PowerShell.

Le variabili di ambiente archiviano i dati usati dal sistema operativo e da altri programmi. PowerShell crea le variabili di ambiente seguenti:

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • PSExecutionPolicyPreference
  • Psmodulepath
  • PSModuleAnalysisCachePath
  • PSDisableModuleAnalysisCacheCleanup

Per le descrizioni complete di queste variabili, vedere le variabili di ambiente di PowerShell di questo articolo.

Descrizione lunga

PowerShell può accedere e gestire le variabili di ambiente in una delle piattaforme del sistema operativo supportate. Il provider di ambiente di 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 sono distinzione tra maiuscole e minuscole. Ad esempio, $env:Path e $env:PATH sono variabili di ambiente diverse in piattaforme non Windows.

Le variabili di ambiente, a differenza di altri tipi di variabili in PowerShell, vengono sempre archiviate come stringhe. Diversamente da altre variabili, vengono ereditate dai processi figlio, ad esempio processi in background locali e sessioni in cui vengono eseguiti i membri del modulo. In questo modo, le variabili di ambiente sono adatte per archiviare i valori necessari nei processi padre e figlio.

In Windows le variabili di ambiente possono essere definite in tre ambiti:

  • Ambito computer (o sistema)
  • Ambito user
  • Ambito del processo

L'ambito Processo contiene le variabili di ambiente disponibili nel processo corrente o nella sessione di PowerShell. Questo elenco di variabili viene ereditato dal processo padre e viene costruito dalle variabili negli ambiti Machine e User .

Quando si modificano le variabili di ambiente in PowerShell, la modifica influisce solo sulla sessione corrente. Questo comportamento è simile al set comportamento del comando in Windows Command Shell e al setenv comando 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 con ambito computer, è 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
  • Cmdlet del provider di ambiente e dell'elemento
  • Classe .NET System.Environment

Usare la sintassi della variabile

È 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 WINDIR ambiente:

$Env:windir
C:\Windows

In questa sintassi, il segno dollaro () indica una variabile e il nome dell'unità ($) indica una variabile di ambiente seguita dal nome della variabile (Env: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 Foo variabile di ambiente:

$Env:Foo = 'An example'

Poiché le variabili di ambiente sono sempre stringhe, è possibile usarle come qualsiasi altra variabile contenente una stringa. Ad 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!

In PowerShell una variabile di ambiente non può essere impostata su una stringa vuota. L'impostazione di una variabile di ambiente su $null o una stringa vuota lo rimuove dalla sessione corrente. Ad esempio:

$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+            ~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand

Get-Member restituito un errore perché la variabile di ambiente è stata rimossa. È possibile notare che non restituisce un errore quando lo si usa in una stringa vuota:

'' | Get-Member -MemberType Properties
   TypeName: System.String

Name   MemberType Definition
----   ---------- ----------
Length Property   int Length {get;}

Per altre informazioni sulle variabili in PowerShell, vedere about_Variables.

Usare i cmdlet del provider di ambiente e degli elementi

Il provider di ambiente di PowerShell offre un'interfaccia per interagire con le variabili di ambiente in un formato simile a un'unità file system. Consente di ottenere, aggiungere, modificare, cancellare ed eliminare variabili di ambiente e valori in PowerShell.

Ad esempio, per creare la Foo variabile di ambiente con un valore di 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 , elencare le variabili di ambiente con Set-ItemGet-Iteme 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 Get-ChildItem cmdlet per visualizzare un elenco completo di variabili di ambiente:

Get-ChildItem Env:

Per altre informazioni sull'uso del provider di ambiente per gestire le variabili di ambiente, vedere about_Environment_Provider.

Usare i metodi System.Environment

La classe System.Environment fornisce i GetEnvironmentVariable() metodi e SetEnvironmentVariable() per ottenere e modificare le variabili di ambiente.

Nell'esempio seguente viene creata una nuova variabile di ambiente, , Foocon un valore di Bar e quindi restituisce il relativo valore.

[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar

È possibile rimuovere una variabile di ambiente con il SetEnvironmentVariable() metodo specificando una stringa vuota per il valore della variabile. Ad esempio, per rimuovere la Foo variabile di ambiente:

[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')

Per altre informazioni sui metodi della classe System.Environment , vedere Metodi di ambiente.

Create variabili di ambiente persistenti in Windows

In Windows sono disponibili tre metodi per apportare una modifica persistente a una variabile di ambiente:

  • Impostarli nel tuo profilo
  • Uso del SetEnvironmentVariable() metodo
  • Usare il Pannello di controllo di sistema

Impostare le variabili di ambiente nel profilo

Qualsiasi variabile di ambiente aggiunta o modifica 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 e aggiornare la CompanyUri variabile di ambiente in modo da includere la PathC:\Tools cartella, 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 anziché 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 $PROFILE variabile automatica. Per altre informazioni sui profili, vedere about_Profiles.

Impostare le variabili di ambiente con SetEnvironmentVariable()

In Windows è possibile specificare un ambito per il SetEnvironmentVariable() metodo come terzo parametro per impostare la variabile di ambiente in tale ambito. Gli ambiti computer e utente sono entrambi persistenti all'esterno del processo corrente, consentendo di salvare una variabile di ambiente nuova o modificata.

Ad esempio, per salvare una nuova variabile Foo di ambiente con il valore Barnell'ambito del computer:

[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

Nell'Pannello di controllo di sistema è possibile aggiungere o modificare le variabili di ambiente esistenti negli ambiti User and 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 persistente a una variabile di ambiente in Windows usando il Pannello di controllo di sistema:

  1. Aprire il Pannello di controllo di sistema.
  2. Selezionare Sistema.
  3. Selezionare Impostazioni di sistema avanzate.
  4. Passare alla scheda Avanzate .
  5. Selezionare Variabili di ambiente....
  6. Apportare le modifiche.

Create variabili di ambiente persistenti nelle piattaforme non Windows

Linux e macOS dispongono di 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 /etc/environment file o creare uno script che imposta le variabili di ambiente e inserirle nella /etc/profile.d cartella. In macOS è possibile aggiungere variabili di ambiente al /etc/profile file.

Quando si avvia PowerShell da un'altra shell, è possibile definire le variabili di ambiente nei file di inizializzazione specifici della shell della shell usati da shell non di accesso, ad esempio ~/.bashrc per bash o ~/.zshrc per zsh.

Per altre informazioni, vedere la documentazione per il sistema operativo e la 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 variabili di preferenza, ma vengono ereditate dalle sessioni figlio delle sessioni in cui vengono create. Per altre informazioni sulle variabili di preferenza, vedere about_Preference_Variables.

Le variabili di ambiente che archiviano le preferenze includono:

  • POWERSHELL_TELEMETRY_OPTOUT

    Per rifiutare esplicitamente i dati di telemetria, impostare la variabile di ambiente su true, yeso 1. Per altre informazioni, vedere about_Telemetry.

    Affinché questa variabile di ambiente abbia effetto, deve essere impostata prima di avviare il processo di PowerShell. Per informazioni sulla creazione di variabili di ambiente persistenti, vedere le sezioni precedenti.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    A 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_UPDATECHECK

    Il 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:

    • Off disattiva la funzionalità di notifica dell'aggiornamento
    • Default è uguale a non definire POWERSHELL_UPDATECHECK:
      • Le versioni disponibili a livello generale (GA) inviano notifiche degli aggiornamenti alle versioni GA
      • Le versioni di anteprima/RC inviano notifiche degli aggiornamenti alle versioni GA e di anteprima
    • LTS notifica solo gli aggiornamenti alle versioni ga di manutenzione a lungo termine (LTS)

    I valori non predefiniti della variabile di ambiente devono essere impostati prima di avviare il processo di PowerShell. Per informazioni sulla creazione di variabili di ambiente persistenti, vedere le sezioni precedenti.

  • PSExecutionPolicyPreference

    Archivia i criteri di esecuzione impostati per la sessione corrente. Questa variabile di ambiente esiste solo quando si imposta un criterio 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.

    • Utilizzare il cmdlet Set-ExecutionPolicy. Usare il parametro Scope con un valore di Process.

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

  • Psmodulepath

    La $env:PSModulePath variabile di ambiente contiene un elenco di percorsi delle cartelle che vengono cercati per trovare moduli e risorse. In Windows l'elenco delle posizioni delle cartelle è separato dal carattere 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:PSModulePath sono:

    • Percorsi a livello di sistema: queste cartelle contengono moduli che vengono forniti con PowerShell. I moduli vengono archiviati nella $PSHOME\Modules posizione. Questo è anche il percorso in cui vengono installati i moduli di gestione di Windows.

    • Moduli installati dall'utente: questi sono moduli installati dall'utente. 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.

      • In Windows il percorso dell'ambito CurrentUser specifico dell'utente è la $HOME\Documents\PowerShell\Modules cartella. Il percorso dell'ambito AllUsers è $env:ProgramFiles\PowerShell\Modules.
      • Nei sistemi non Windows, il percorso dell'ambito CurrentUser specifico dell'utente è la $HOME/.local/share/powershell/Modules cartella. Il percorso dell'ambito AllUsers è /usr/local/share/powershell/Modules.

    Inoltre, i programmi di installazione che installano moduli in altre directory, ad esempio la directory Programmi, possono aggiungere i percorsi al valore di $env:PSModulePath.

    Per altre informazioni, vedere about_PSModulePath.

  • PSModuleAnalysisCachePath

    PowerShell fornisce il controllo sul file usato per memorizzare nella cache i dati relativi ai moduli e ai relativi cmdlet. La cache viene scritta all'avvio durante la ricerca di un comando e viene scritta in un thread in background 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 la prossima volta che si avvia PowerShell.

    Per modificare il percorso predefinito della cache, impostare la variabile di ambiente prima di avviare PowerShell. Il valore deve denominare un percorso completo (nome di file incluso) per il quale PowerShell dispone dell'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 del file, impostare 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'
    

    Questo imposta il percorso del dispositivo NUL . PowerShell non può scrivere nel percorso, ma non viene restituito alcun errore. È possibile visualizzare gli errori segnalati usando un traccia:

    Trace-Command -PSHost -Name Modules -Expression {
      Import-Module Microsoft.PowerShell.Management -Force
    }
    
  • PSDisableModuleAnalysisCacheCleanup

    Quando si scrive la cache di analisi del modulo, PowerShell controlla i moduli che non esistono più per evitare una cache di grandi dimensioni inutilmente grande. A volte questi controlli non sono auspicabili, nel qual caso è possibile disattivarli impostando il 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

  • PATH

    La $env:PATH variabile di ambiente contiene un elenco di percorsi delle cartelle che il sistema operativo cerca file eseguibili. In Windows l'elenco delle posizioni delle cartelle è separato dal carattere virgola (;). Nelle piattaforme non Windows i due punti (:) separano i percorsi delle cartelle nella variabile di ambiente.

  • PATHEXT

    La $env:PATHEXT variabile contiene un elenco di estensioni di file che Windows considera file eseguibili. Quando viene eseguito un file di script con una delle estensioni elencate 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 del file utilizzata dal linguaggio di scripting. Ad esempio, per eseguire script Python nella console corrente, aggiungere l'estensione .py alla variabile di ambiente. Per Windows per supportare l'estensione come file eseguibile, è necessario registrare l'estensione .py del file usando i ftype comandi e assoc della shell dei comandi CMD. PowerShell non ha alcun metodo diretto per registrare il gestore file. Per altre informazioni, vedere la documentazione del comando ftype .

    Gli script di PowerShell iniziano sempre nella sessione della console corrente. Non è necessario aggiungere l'estensione .PS1 .

  • Variabili XDG

    Nelle piattaforme non Windows PowerShell usa le variabili di ambiente XDG seguenti, come definito dalla specifica della directory di base XDG.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_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. È possibile disattivare il supporto per le sequenze di escape ANSI usando term o NO_COLOR variabili di ambiente.

  • TERMINE

    I valori seguenti modificano $env:TERM il comportamento come segue:

    • dumb -Imposta $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono -Imposta $PSStyle.OutputRendering = PlainText
    • xtermm -Imposta $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    Se $env:NO_COLOR esiste, $PSStyle.OutputRendering è impostato su PlainText. Per altre informazioni sulla variabile di ambiente NO_COLOR , vedere https://no-color.org/.

Vedi anche