Как установить переменную env в PowerShell, если она не существует?
Я удивлен, что я не получил ответ для этого распространенного сценария после Googling некоторое время...
Как можно установить переменную среды в PowerShell, если она не существует?
Ответ 1
Следующий код определяет переменную окружения FOO, если она еще не существует.
if (-not (Test-Path env:FOO)) { $env:FOO = 'bar' }
Примечание. Эта новая переменная среды будет существовать только для текущего процесса и любых дочерних процессов, которые она создает (например, при запуске нового сеанса PowerShell из ISE). Спасибо, PetSerAl.
# 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), поскольку никакие другие приложения (процессы) не могут видеть эту переменную в любом случае.