Работа с переменными окружения в Powershell Env


09 августа 2019


Работа с переменными окружения в Powershell Env

При работе с переменными окружения в Powershell есть ряд проблем, с которыми мы можем столкнуться. Если мы выполним следующую команду, то увидим, что у нас есть диск и именем Env, который и хранит переменные:

Get-PSDrive -PSProvider "Environment"

Powershell provider

Мы можем в него перейти и увидеть все переменные окружения:

cd ENV:\
ls

Если мы попробуем изменить переменные следующим способом, то они будут работать только в рамках PS и до окончания сеанса (перезагрузки например):

$variable = (Get-Item -Path 'Env:\Path').Value
$new_path = $variable + ';C:\Git\'
Set-Item -Path Env:\Path -Value $new_path

Способ выше аналогичен этому:

$Env:Path += ";C:\Git\"

Если нам нужно сделать переменную среды постоянной есть решение для компьютера и конкретного пользователя.

 

Изменение переменных окружения пользователя в Powershell

У нас есть ветка реестра, которая отвечает за область пользователя:

HKEY_CURRENT_USER\Environment\Path

В деталях мы уже рассматривали как работать в powershell с реестром и не будем разбирать в деталях. Способом ниже мы обратимся к Path и добавим значение "C:\Git\":

$variable = Get-ItemPropertyValue -Path 'HKCU:\Environment\' -Name 'Path'
$new_path = $variable + ';C:\Git\'
Set-ItemProperty -Path 'HKCU:\Environment\' -Name 'Path' -Value $new_path

Обращайте внимание, что у вас стоит ; перед новым значением (если вы изменяете Path), и что вы сохраняете предыдущее значение путем сложения.

Изменение переменных пользователя Powershell

Изменение переменных Env компьютера в Powershell

У нас есть другая ветка реестра, которая хранит значения переменных компьютера:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Изменяются они так же, как и в случае с пользователем:

$reg = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\'
$variable = Get-ItemPropertyValue -Path $reg -Name 'Path'
$new_path = $variable + ';C:\Git\'
Set-ItemProperty -Path $reg -Name 'Path' -Value $new_path

 

Создание новых переменных Environment в Powershell

Мы можем просто создать новую переменную обращаясь напрямую к реестру, но эти способы были рассмотрены в статье по ссылке выше и есть более простой способ.

Для компьютера:

$var = 'siteName'
$znachenie = 'fixmypc.ru'
[System.Environment]::SetEnvironmentVariable($var,$znachenie,[System.EnvironmentVariableTarget]::Machine)

И для пользователя:

[System.Environment]::SetEnvironmentVariable($var,$znachenie,[System.EnvironmentVariableTarget]::User)

Powershell добавить переменную окружения Env

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.