web-dev-qa-db-fra.com

Comment définir une variable env dans PowerShell si elle n'existe pas?

Je suis surpris de ne pas avoir obtenu la réponse à ce scénario courant après une recherche sur Google pendant un certain temps ...

Comment définir une variable d'environnement dans PowerShell si elle n'existe pas?

22
hackjutsu

Le code suivant définit la variable d'environnement FOO, si elle n'existe pas encore.

if (-not (Test-Path env:FOO)) { $env:FOO = 'bar' }

Remarque: Cette variable d'environnement nouvellement définie n'existera que pour le processus en cours et tous les processus enfants qu'elle crée (par exemple, lorsque vous démarrez une nouvelle session PowerShell à partir de la ISE). Merci, PetSerAl .

Ce qui suit a été principalement contribué par Ansgar Wiechers , avec un supplément de Mathias R. Jessen :

Si vous souhaitez définir une variable d'environnement de manière persistante, vous devez utiliser la fonction statique SetEnvironmentVariable() méthode de la classe [System.Environment] :

# user environment
[Environment]::SetEnvironmentVariable('FOO', 'bar', 'User')

# system environment (requires admin privileges)
[Environment]::SetEnvironmentVariable('FOO', 'bar', 'Machine')

Notez que ces définitions prennent effet dans futur sessions (processus), donc afin de définir la variable pour le actuel aussi, exécutez $env:FOO = 'bar' en plus, qui est en fait la même chose que la fonction [Environment]::SetEnvironmentVariable('FOO', 'bar', 'Process').

Lorsque vous utilisez [Environment]::SetEnvironmentVariable() avec User ou Machine, un message WM_SETTINGCHANGE est envoyé à d'autres applications pour les informer de la modification (bien que peu d'applications réagissent à de telles notifications).
Cela ne s'applique pas lors du ciblage de Process (ou lors de l'attribution à $env:FOO), Car aucune autre application (processus) ne peut de toute façon voir la variable.

Voir aussi .

40
mklement0