Почему моя переменная окружения PATH отличается от командной строки?

11

Немного важного фона: у моей компании есть общий VBS-скрипт входа в систему, который вносит изменения в переменную среды PATH пользователя при входе в систему и позволяет мне запускать программное обеспечение, которое зависит от сопоставленных файловых ресурсов DFS. Я также недавно установил Windows Powershell SDK на свой компьютер с Windows 7 Enterprise и попытался изменить переменную среды PATH из командной строки Powershell.

После этого я заметил, что больше не могу запускать приложения, соответствующие этим модификациям PATH при входе в систему, и что PATH редактора переменных среды был настроен на что-то отличное от того, что отображалось при выдаче 'echo %PATH%'из командной строки.

Так, например (упрощение), из редактора переменных среды ( My Computer properties -> Advanced System Settings -> Environment Variables) у меня было

 C:\MyDir\; C:\MyOtherDir

тогда как, когда я сделал 'echo %PATH%'из командной строки, я получил:

 C:\MyDir\

У кого-нибудь еще была подобная проблема, и было ли какое-то решение? Когда я погуглил на помощь, я наткнулся на это:

(Похожие?) Тема StackOverflow

Мне пришло в голову, что если сценарий входа в систему был инициирован чем-то другим, чем моя среда Explorer.exe, то это была проблема. Однако, когда я сам запустил скрипт входа в систему, мой PATH из командной строки не изменился. Какое это имеет отношение к PowerShell? Мне не хватает, как это связано с этой установкой полностью.

сопоставление с образцом
источник
Как вы изменили путь в powershell? Где ты повторил% PATH%? В cmd.exe?
Вернер Хенце
ОТВЕТ НИЖЕ ГЕНИЙ.
SDsolar

Ответы:

11

В Windows есть два класса переменных среды: системные переменные среды и пользовательские переменные среды . Если вы используете, echo %PATH%вы увидите свою переменную среды пользователя PATH . Только если не определена пользовательская переменная, системная переменная будет действовать для пользовательских процессов.

PATHСепаратор ;не должен следовать пробел.

Следующее примечание Microsoft может быть полезным:

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

   HKEY_CURRENT_USER \ 
         Environment

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

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

Обратите внимание, что любая переменная среды, которую необходимо расширить (например, при использовании %SYSTEM%), должна храниться в реестре в качестве REG_EXPAND_SZзначения реестра. Любые значения типа REG_SZне будут расширены при чтении из реестра.

Дополнительное замечание: всякий раз, когда процесс изменяет свою среду (а не параметры реестра, которые определяют среду для новых процессов), изменения видны только для дочерних процессов.

Аксель Кемпер
источник
1
Я хотел бы подчеркнуть точку зрения Акселя: если вам нужно изменить переменные среды, то вам нужно внести изменения в реестр. На самом деле я создал функцию PowerShell, чтобы помочь с этим: computerperformance.co.uk/powershell/powershell_env_path.htm
Гай Томас
1
Нет значений для изменения, только две переменные tmpи temp. Вы уверены, что это путь для пользователя, который должен быть изменен?
Johnny_D
Кажется, это не работает (по крайней мере, до перезагрузки). Переменная path отсутствует в HKCU \ Environment, переменная path в cmd.exe отображается правильно, но запущенные приложения все еще видят старую переменную path.
Мартин Аргерами
@Martin: да, запущенное приложение не распознает изменения в реестре, потому что они получают копию своей памяти во время запуска приложения. Эта копия зависит от родительского процесса, который запускает подпроцессы. Если они, например, запускаются из Проводника Windows, вам необходимо перезапустить Проводник, чтобы получить новый PATH.
Аксель Кемпер
Ты прибил его по голове! Путь туда добавлял некоторые программы, которые, как я знал, были удалены, такие как Microsoft SQL. Я знал, что это не из-за пути системных свойств, который я установил. Большое спасибо - из будущего - вы опубликовали этот ответ более 3 лет назад.
SDsolar