Я удивлен, что я не получил ответа на этот общий сценарий после Googling за то, что ...Как установить переменную env в Powershell, если она не существует?
Как переменная среды должна быть установлена в Powershell, если она не существует?
Я удивлен, что я не получил ответа на этот общий сценарий после Googling за то, что ...Как установить переменную env в Powershell, если она не существует?
Как переменная среды должна быть установлена в Powershell, если она не существует?
В следующем коде определяется переменная среды 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
), поскольку никакие другие приложения (процессы) не могут видеть эту переменную в любом случае.