【发布时间】:2020-10-16 15:29:22
【问题描述】:
我在System Path -> C:\Program Files\TEE-CLC 中添加了一个环境变量。在那之后,我希望我可以在不提供完整路径的情况下从 PowerShell 运行位于 C:\Program Files\TEE-CLC 下的 foo.exe。问题是当我在我的用户下启动一个新的、全新的 Powershell 会话时,它看不到新添加的路径,但是当我在管理员下启动它时一切正常。
我在两种模式下检查了$env:Path(User和Admin),发现我在User下时我的新路径不存在,但是当Powershell为as Administrator时我可以看到它
如何使我新添加的变量在 User 而不是 Administrator 下运行可见?
更新
我在User 下运行了 2 个命令,结果不同。为什么$env:Path 不显示与[System.Environment]::GetEnvironmentVariable('PATH', 'MACHINE') 相同的输出以及为什么当前PSSession 看不到后一个命令的路径?`
复制步骤
- 添加环境路径变量
[Environment]::SetEnvironmentVariable('PATH', ($env:Path + ';C:\Program Files\Foo'), 'MACHINE') - 关闭会话
- 以用户身份打开一个新的 ps 会话 -> 检查
$env:PATH->C:\Program Files\Foo不在那里 - 以管理员身份打开一个新的 ps 会话 -> 检查
$env:PATH->C:\Program Files\Foo在那里
【问题讨论】:
-
如何将“C:\Program Files\FOOPATH”添加到 PATH 变量中? SETX?图形用户界面?
-
@lit 它是从 PS 脚本中添加的,使用
[Environment]::SetEnvironmentVariable('PATH', $UpdatedPathList, 'MACHINE') -
要更改
Path的值,您可以使用[Environment]::SetEnvironmentVariable("Path", $Env:Path + ";C:\SomeLocation", "Machine"),因此很遗憾,您没有显示或提供专门定义$UpdatedPathList变量值的代码,我们不知道它是否包含所需的信息。您还需要了解,虽然您可能已将其添加到系统、(机器) 环境中,但您的 PS 会话仅继承启动时定义的内容,新添加的内容不会传播到现有会话中. -
当您查看
Path值时,它将显示在 PS 会话打开时在Machine和User下可用的所有值,以及在该会话中创建的任何值,即Process。如果您想在Machine或User中创建一个持久变量,并且还希望在同一会话中使用它,您还需要将其定义为Process变量,例如$Env:Path += ";C:\SomeLocation",或[Environment]::SetEnvironmentVariable("Path", $Env:Path + ";C:\SomeLocation", "Process")。 -
@Compo 还有一点:1)我明确提供了我运行的信息
The issue is when I start a new, fresh Powershell session2)看看图片,路径就在那里。因此,它被正确地提供给SetEnvironmentVariable函数。我想我需要提供更多信息,因为显然,这个问题并不清楚。转到“重现的步骤”部分,以重现您机器上的行为
标签: powershell environment-variables powershell-5.0