Какие Windows ключи реестра хранят переменную PATH? - PullRequest
1 голос
/ 08 января 2020

Сценарий должен добавить программу в Windows PATH. Другой сценарий должен удалить эту же программу из Windows PATH. В случае проблем совместимости скрипт должен работать с большинством, если не со всеми, Windows.

В каком ключе реестра (или ключах) последовательно хранится PATH на широком диапазоне типов компьютеров Windows?

Например, на моем Windows 10 Home Ноутбук PATH PATH хранится в свойстве Path следующего ключа:

HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Но другой пользователь сообщает мне, что этот ключ недоступен на его или ее машине Windows.

Итак, каков полный список основных возможностей определения местоположения?

Обратите внимание, что сценарии нацелены на ключи напрямую, потому что изменения в PATH должны сохраняться после окончания времени выполнения. Другие подходы, по-видимому, только временно изменяют PATH во время работы программы.

1 Ответ

2 голосов
/ 08 января 2020

В PowerShell постоянно устанавливайте среду PATH, используя следующий метод *1003*:

[Environment]::SetEnvironmentVariable( 'VARIABLE_NAME', 'VALUE', [EnvironmentVariableTarget]::Machine )

Чтобы удалить переменную среды, задайте для переменной среды значение $null:

[Environment]::SetEnvironmentVariable( 'VARIABLE_NAME', $null, [EnvironmentVariableTarget]::Machine )

А почему вашим пользователям не хватает этого ключа реестра? Это звучит как большая проблема, потому что HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment - это место, где хранятся и извлекаются системные переменные среды. Так было с XP, и в документации об этом говорится еще. NET Framework 2.0 .

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


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

$env:VARIABLE_NAME = 'VALUE'
...