为什么PowerShell似乎不尊重$ env:path变量?

时间:2019-03-25 17:10:08

标签: git powershell github path

我安装了GitHub和Git,并希望将Git添加到PowerShell路径。我将其添加到系统路径中,它可在cmd.exe中运行,并在我打印$ env:path时显示正确的路径,但PowerShell仍无法识别git。

我试图重新启动,以为它可能滞后了,但那并不能解决问题。

如果我导航到git所在的路径(实际上是从$ env:path的输出中复制它,以确保它不是拼写错误),然后运行./git即可正常工作。

PS C:\> $env:path 
C:\Program Files\Microsoft MPI\Bin\;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft MPI\Bin\;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Users\JHdJ\AppData\Local\Programs\Python\Launcher\;C:\Users\JHdJ\AppData\Local\Microsoft\WindowsApps;C:\Users\JHdJ\AppData\Local\GitHubDesktop\bin;C:\Users\JHdJ\AppData\Local\GitHubDesktop\app-1.6.5\resources\app\git\cmd"

                                                                                              #"# (dummy comment to fix syntax highlighting)

PS C:\> git
git : The term 'git' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ git
+ ~~~
    + CategoryInfo          : ObjectNotFound: (git:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


PS C:\Users\JHdJ\AppData\Local\GitHubDesktop\app-1.6.5\resources\app\git\cmd> ./git

如前所述,后者工作正常。

此外,在cmd.exe中,仅运行git即可正常工作。

我希望PowerShell将git识别为命令,因为$env:Path指向git.exe的目录。

1 个答案:

答案 0 :(得分:3)

您的PATH环境变量($env:PATH)配置错误

它包含一个无关的" ,作为其值的一部分

# Your $env:Path value - note the unexpected, unpaired " at the end.
...;C:\Users\JHdJ\AppData\Local\GitHubDesktop\app-1.6.5\resources\app\git\cmd"

cmd.exe忽略无关的",但是PowerShell不会,因此您的C:\Users\JHdJ\AppData\Local\GitHubDesktop\app-1.6.5\resources\app\git\cmd目录实际上是 not 的一部分从PowerShell的角度来看$env:PATH的内容,它可以解释您的症状。

解决方案是固定$env:PATH

  • 临时,仅用于当前会话

    $env:Path = $env:Path -replace '"'  # remove embedded " chars.
    
  • 永久,用于将来的会议

    $currUserPath = [Environment]::GetEnvironmentVariable('Path', 'User')
    [Environment]::SetEnvironmentVariable('Path', $currUserPath -replace '"', 'User')
    
    • 请注意,$env:PATH是来自两个不同注册表位置的 composite 值:一个机器范围内的和一个用户特定的一,则应分别 更新它们。在您的情况下,考虑到目录。问题是特定于用户的,这是需要更新的特定于用户的定义,如上所示。

请注意,更新持久性值并不会自动刷新 current 会话中的值,因此要使该值生效,您必须在 ad hoc 命令中运行好吧。