2016-08-13 4 views

ответ

23

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

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

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

Ниже в основном предоставлены Ansgar Wiechers, с дополнением по Mathias R. Jessen:

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

See also.

Смежные вопросы