Как установить переменную env в PowerShell, если она не существует?

Я удивлен, что я не получил ответ для этого распространенного сценария после Googling некоторое время...

Как можно установить переменную среды в PowerShell, если она не существует?

Ответ 1

Следующий код определяет переменную окружения FOO, если она еще не существует.

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

Примечание. Эта новая переменная среды будет существовать только для текущего процесса и любых дочерних процессов, которые она создает (например, при запуске нового сеанса PowerShell из ISE). Спасибо, PetSerAl.

В основном было представлено Ansgar Wiechers с дополнением Матиас Р. Джессен:

Если вы хотите постоянно определять переменную окружения, вам необходимо использовать статический метод SetEnvironmentVariable() [System.Environment] класс:

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

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

Обратите внимание, что эти определения вступают в силу в будущих сеансах (процессах), поэтому, чтобы определить переменную для текущего процесса, а также, запустите $env:FOO = 'bar' дополнительно, что фактически совпадает с [Environment]::SetEnvironmentVariable('FOO', 'bar', 'Process').

При использовании [Environment]::SetEnvironmentVariable() с User или Machine сообщение WM_SETTINGCHANGE отправляется в другие приложения для уведомить их об изменениях (хотя некоторые приложения реагируют на такие уведомления).
Это не применяется при таргетинге Process (или при назначении $env:FOO), поскольку никакие другие приложения (процессы) не могут видеть эту переменную в любом случае.

См. также.