PATH 환경 변수가 명령 프롬프트와 다른 이유는 무엇입니까?


10

중요한 배경 : 회사는 로그인시 사용자 PATH 환경 변수를 수정하고 매핑 된 DFS 파일 공유에 대한 종속성이있는 소프트웨어를 실행할 수있는 일반 로그인 VBS 스크립트가 있습니다. 또한 최근에 Windows Powershell SDK를 Windows 7 Enterprise 컴퓨터에 설치하고 Powershell 명령 줄에서 PATH 환경 변수를 수정하려고 시도했습니다.

다음으로, 나는이 로그인 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에서?
Werner Henze

아래 답변은 GENIUS입니다.
SDsolar

답변:


11

Windows에는 두 가지 클래스의 환경 변수가 있습니다. 시스템 환경 변수 사용자 환경 변수 . 사용중인 경우 echo %PATH% 너는 너를 볼거야. 사용자 환경 변수 PATH. 정의 된 사용자 변수가없는 경우에만 시스템 변수가 사용자 프로세스에 적용됩니다.

그만큼 PATH 분리 기호 ; 뒤에는 공백이 없어야합니다.

다음과 같은 Microsoft 메모 도움이 될 수 있습니다.

다음 레지스트리 키를 편집하여 사용자 환경 변수를 수정할 수 있습니다.

   HKEY_CURRENT_USER \ 
         Environment

다음 레지스트리 키를 편집하여 시스템 환경 변수를 수정할 수 있습니다.

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

확장해야하는 모든 환경 변수 (예 : 사용하는 경우 %SYSTEM% )은 레지스트리에 a REG_EXPAND_SZ 레지스트리 값. 유형의 모든 값 REG_SZ 레지스트리에서 읽을 때 확장되지 않습니다.

추가 설명 : 프로세스가 새로운 프로세스의 환경을 정의하는 레지스트리 설정 대신 환경을 변경할 때마다 변경 사항은 하위 프로세스에만 표시됩니다.


1
환경 변수를 수정해야한다면 Axel의 요점을 강조하고 싶습니다. 그런 다음 레지스트리에서 변경해야합니다. 사실 저는 이것을 도와주는 PowerShell 함수를 만들었습니다 : computerperformance.co.uk/powershell/powershell_env_path.htm
Guy Thomas

1
수정 될 값은 없으며 두 개의 변수 만 있습니다. tmptemp. 이 경로가 사용자의 경로인지 확인해야합니다. 수정해야합니다.
Johnny_D

이것은 작동하지 않는 것 같습니다 (최소한 재부팅 전에). 경로 변수가 HKCU \ Environment에 없으므로 cmd.exe의 경로 변수가 올바르게 표시되지만 시작된 응용 프로그램은 이전 경로 변수를 계속 볼 수 있습니다.
Martin Argerami

@Martin : 예, 시작된 응용 프로그램은 응용 프로그램 시작 중에 환경의 메모리 복사본을 가져 오기 때문에 레지스트리 변경을 인식하지 못합니다. 이 사본은 하위 프로세스를 시작하는 상위 프로세스에 따라 다릅니다. 예를 들어 Windows 탐색기에서 시작한 경우 새 PATH를 얻으려면 탐색기를 다시 시작해야합니다.
Axel Kemper

네, 그 일이 결국 끝났습니다. 감사.
Martin Argerami
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.