哪些Windows注册表键存储PATH变量?

3
一个脚本需要将程序添加到Windows PATH中。另一个脚本需要从Windows PATH中删除同样的程序。为了兼容性问题,该脚本需要在大多数甚至所有版本的Windows上正常工作。

哪些注册表键可以在各种类型的Windows机器上一致地存储PATH?

例如,在我的Windows 10 Home版笔记本电脑上,PATH存储在以下密钥的Path属性中:
HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

但是另一个用户告诉我,在他或她的Windows机器上没有这个键可用。

那么完整的键位置可能性列表是什么?

请注意,这些脚本直接针对键进行定位,因为对PATH的更改必须在运行时结束后持续存在。其他方法似乎只会在程序运行时临时更改PATH。


2
在 Win XP 到 Server 2012 R2、Win10 Enterprise 和 Win10 Pro 中,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 是注册表中的键。 - Kundan
1个回答

4

通过使用以下方法,从PowerShell 永久设置PATH环境变量:

[Environment]::SetEnvironmentVariable( 'VARIABLE_NAME', 'VALUE', [EnvironmentVariableTarget]::Machine )

要删除环境变量,请将环境变量的值设置为$null

[Environment]::SetEnvironmentVariable( 'VARIABLE_NAME', $null, [EnvironmentVariableTarget]::Machine )

关于为什么您的用户会缺少注册表键值? 这听起来像是一个更大的问题,因为 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 是存储和检索系统环境变量的地方。从XP开始就是这样了,而且文档自 .NET Framework 2.0 起便如此说明。

如果某人的机器上缺少该键,我打赌用户要么没有在正确的位置查找,要么某种恶意软件可能是原因。


如果您想在进程级别设置环境变量(如评论中所述),可以使用$env:变量在进程级别读取和设置环境变量:

$env:VARIABLE_NAME = 'VALUE'

你能展示一下如何临时设置PATH变量吗?这样它就可以在同一会话中立即使用,而且还可以永久可用。 - CodeMed
那很简单,$env:VARIABLE_NAME = 'VALUE'。这将在进程级别设置环境变量,因此当前进程和子进程将能够看到该变量。 - codewario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接