Управление переменными окружения Windows в PowerShell

Управление переменными окружения Windows в PowerShell

С помощью PowerShell вы можете получать, добавлять, удалять, или изменять значения переменных окружения (среды). В переменных окружения Windows хранит различную пользовательскую и системную информацию (чаще всего это пути к системным и временным папкам), которая используется операционной системой и приложениями, установленными на компьютере.

В Windows доступны несколько типов переменных окружения:

  • Переменные окружения процесса – создаются динамически и доступны только в текущем запущенном процесс
  • Пользовательские переменные окружения – содержат настройки конкретного пользователя и хранятся в его профиле (хранятся в ветке реестре
    HKEY_CURRENT_USEREnvironment
    )
  • Системные переменные окружения – глобальные переменные окружения, которые применяются для все пользователей (хранятся в ветке
    HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment
    ) Переменные окружения хранятся в реестре Windows

Типы переменных окружения Windows указаны в порядке уменьшения приоритета. Т.е. значение переменной окружения %TEMP% в пользовательском профиле будет иметь больший приоритет, чем значение системной переменной окружения %TEMP%.

Для управления переменными окружениями обычно используется вкладка Advanced в свойствах системы. Чтобы открыть System Properties, выполните команду
SystemPropertiesAdvanced
и нажмите на кнопку Environment Variable.

В этом окне можно создать и отредактировать переменные среды для текущего пользователя или системные переменные окружения.

Настройка переменных окружения в окне свойств системы

Чтобы вывести полный список переменных окружения и их значения в PowerShell, выполните команду:

Get-ChildItem Env:

PowerShell - вывести все переменные окружения

Как вы видите, для доступа к переменным окружения в PowerShell используется отдельный виртуальный диск Env:, доступный через провайдер Environment.

Виртуальный диск с переменными окружения

Получить значение определенной переменной окружения Path:

Get-ChildItem env:Path

Получить значение переменной окружения из PowerShell

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

Использование автонабора при выборе переменной окружения в консоли PowerShell

Чтобы разбить значение переменной окружения на строки, выполните:

(Get-ChildItem env:Path).value -split ";"

Разбить значение переменной окружения на строки

Добавить значение в переменную окружения Path:

$Env:Path += ";c:tools"

Однако это добавляет временное значение в переменную окружения
Path
. При следующей перезагрузке новое значение в переменной будет сброшено. Чтобы добавить постоянное значение в системную переменную окружения, используется такая конструкция:

$path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
[System.Environment]::SetEnvironmentVariable("Path", $path + ";C:tools", "Machine")
[System.Environment]::GetEnvironmentVariable("Path","Machine") -Split ";"

Чтобы изменить пользовательскую переменную окружения, замените в предыдущих командах область Machine на User.

Несмотря на то, что фактически переменные окружения и их значения хранятся в реестре, прямое изменение их значений в реестре используется редко. Причина в том, что текущий процесс при запуске считывает значение переменных окружения из реестра. Если вы измените их, процесс не будет уведомлён об этом.

Если вам нужно из PowerShell изменить в реестре значение переменной окружения, используются команды:

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

Вы можете создать локальную переменную окружения. По умолчанию такая переменная окружения будет доступна только в текущем процессе (PowerShell), из которого она создана. После того, как процесс будет закрыт – переменная окружения будет удалена.

$env:SiteName = 'winitpro.ru'
Get-ChildItem Env:SiteName

Если нужно создать глобальную системную переменную (нужны права администратора), используйте команду:

[System.Environment]::SetEnvironmentVariable('siteName','winitpro.ru',"Machine")

Очистить и удалить глобальную переменную окружения:

[Environment]::SetEnvironmentVariable('siteName', $null, "Machine")

Windows 11
Управление переменными окружения Windows в PowerShell