为什么我的 PATH 环境变量与命令提示符不同?

Pat*_*ing 13 windows-7 powershell command-line environment-variables

一些重要的背景:我的公司有一个通用的登录 VBS 脚本,它在登录时修改用户 PATH 环境变量,并允许我运行依赖于映射 DFS 文件共享的软件。我最近还在我的 Windows 7 Enterprise 机器上安装了 Windows Powershell SDK,并尝试尝试从 Powershell 命令行修改我的 PATH 环境变量。

在此之后,我注意到我无法再运行与这些登录 PATH 修改相对应的应用程序,并且环境变量编辑器 PATH 设置为与我'echo %PATH%'从命令提示符发出时显示的不同。

所以例如(简化),从环境变量编辑器(My Computer properties -> Advanced System Settings -> Environment Variables)我有

 C:\MyDir\; C:\MyOtherDir
Run Code Online (Sandbox Code Playgroud)

而当我'echo %PATH%'从命令提示符执行时,我得到:

 C:\MyDir\
Run Code Online (Sandbox Code Playgroud)

有没有其他人遇到过类似的问题,是否有某种解决方案?当我用谷歌搜索帮助时,我发现了这个:

(相关?)StackOverflow 线程

我突然想到,如果登录脚本是由我的 Explorer.exe 环境以外的其他东西启动的,那就是问题所在。但是,当我自己运行登录脚本时,命令提示符中的 PATH 没有改变。这与 PowerShell 有什么关系?我想念它是如何完全连接到该安装的。

Axe*_*per 12

Windows环境变量有系统环境变量用户环境变量两类。如果您正在使用,echo %PATH%您将看到您的用户环境变量 PATH。只有当没有定义用户变量时,系统变量才会对用户进程有效。

PATH分离器;不应该跟一个空白。

以下Microsoft 说明可能会有所帮助:

您可以通过编辑以下注册表项来修改用户环境变量:

   HKEY_CURRENT_USER \ 
         Environment
Run Code Online (Sandbox Code Playgroud)

您可以通过编辑以下注册表项来修改系统环境变量:

   HKEY_LOCAL_MACHINE \ 
               SYSTEM \ 
    CurrentControlSet \ 
              Control \ 
      Session Manager \ 
          Environment
Run Code Online (Sandbox Code Playgroud)

请注意,任何需要扩展的环境变量(例如,当您使用 时%SYSTEM%)都必须作为REG_EXPAND_SZ注册表值存储在注册表中。REG_SZ从注册表中读取时,不会扩展任何类型的值。

附加说明: 每当进程更改其环境(而不是为新进程定义环境的注册表设置)时,这些更改仅对子进程可见。