Ответ 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
), поскольку никакие другие приложения (процессы) не могут видеть эту переменную в любом случае.