При работе с переменными окружения в Powershell есть ряд проблем, с которыми мы можем столкнуться. Если мы выполним следующую команду, то увидим, что у нас есть диск и именем Env, который и хранит переменные:
Get-PSDrive -PSProvider "Environment"
Мы можем в него перейти и увидеть все переменные окружения:
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), и что вы сохраняете предыдущее значение путем сложения.
Получение списка USB устройств в 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)
...
Подписывайтесь на наш Telegram канал
Теги: #powershell