about_Environment_Variables
Descrizione breve
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:
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 qualsiasi delle piattaforme del sistema operativo supportate. Il provider di ambiente PowerShell consente di ottenere, aggiungere, modificare, cancellare ed eliminare variabili di ambiente nella console corrente.
Le variabili di ambiente, a differenza di altri tipi di variabili in PowerShell, vengono sempre archiviate come stringhe. A differenza di 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 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 computer (o sistema)
- Ambito user
- Ambito 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 Computer e Utente .
Quando si modificano le variabili di ambiente in PowerShell, la modifica influisce solo sulla sessione corrente. Questo comportamento è simile al set
comportamento del comando nella shell dei comandi di Windows 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 Environment e Item
- Classe .NET System.Environment
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 WINDIR
variabile di ambiente:
$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 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 viene usato 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 Environment provider e Item
Il provider di ambiente di PowerShell offre un'interfaccia per interagire con le variabili di ambiente in un formato simile a un'unità del 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 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-Item
ed 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 delle 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, Foo
, con un valore e Bar
quindi viene restituito 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.
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
- Uso del
SetEnvironmentVariable()
metodo - Usare il Pannello di controllo di 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 CompanyUri
variabile di ambiente e aggiornare la Path
variabile di ambiente in modo da includere la C:\Tools
cartella , aggiungere le righe seguenti al profilo di PowerShell:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
È 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 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 Foo
di ambiente con il valore Bar
nell'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
Nella Pannello di controllo di sistema è possibile aggiungere o modificare variabili di ambiente esistenti negli ambiti Utente e Sistema (Computer). 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 usando il Pannello di controllo di sistema:
- Aprire il Pannello di controllo di sistema.
- Seleziona Sistema.
- Selezionare Impostazioni di sistema avanzate.
- Passare alla scheda Avanzate .
- Selezionare Variabili di ambiente....
- Apporta le modifiche desiderate.
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:
PSExecutionPolicyPreference
Archivia 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.
Utilizzare il cmdlet
Set-ExecutionPolicy
. Usare il parametro Scope con il valore .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 ulteriori informazioni, vedere about_Execution_Policies.
PSModulePath
La
$env:PSModulePath
variabile di ambiente contiene un elenco di percorsi di cartelle in cui viene eseguita la ricerca per trovare moduli e risorse.Per impostazione predefinita, le posizioni effettive assegnate a
$env:PSModulePath
sono:Percorsi a livello di sistema: queste cartelle contengono moduli forniti con PowerShell. I moduli vengono archiviati nel
$PSHOME\Modules
percorso. 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-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
.
- In Windows il percorso dell'ambito CurrentUser specifico dell'utente è la
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.
PSModuleAnalysisCachePath
PowerShell 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 è:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
Il nome file predefinito per la cache è
ModuleAnalysisCache
.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 (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 $env:PSModuleAnalysisCachePath = 'NUL'
In questo modo viene impostato il percorso del 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 }
PSDisableModuleAnalysisCacheCleanup
Quando 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
PATH
La
$env:PATH
variabile di ambiente contiene 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 (;
).PATHEXT
La
$env:PATHEXT
variabile contiene 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
.py
alla variabile di ambiente. Affinché Windows supporti l'estensione.py
come file eseguibile, è necessario registrare l'estensione di file usando iftype
comandi eassoc
della shell dei comandi CMD. PowerShell non dispone di metodi diretti per registrare il gestore di file. Per altre informazioni, vedere la documentazione per il comando ftype .Gli script di PowerShell iniziano sempre nella sessione della console corrente. Non è necessario aggiungere l'estensione
.PS1
.