使用Powershell设置环境变量类型为REG_EXPAND_SZ

7

我遇到了一个问题。我正在尝试使用PowerShell设置用户环境变量:

[Environment]::SetEnvironmentVariable($key,$value,'User')

但是当我查看注册表时,发现新条目的类型为REG_SZ

我希望它的类型为REG_EXPAND_SZ

有人能帮助我解决这个问题吗?


1
顺便提一下,你应该使用双引号来界定你的PowerShell变量。如果不这样做,它们将被视为文字;你将会得到$key作为键名,而不是$key的值作为名称。 - x0n
问题已经被编辑以应对@x0n的敏锐观察。 - Tim Lewis
2个回答

10
使用 Microsoft.Win32 命名空间进行注册表方法。要设置数据类型,请使用 RegistryValueKind 枚举。如下所示:
[Microsoft.Win32.Registry]::SetValue("HKEY_CURRENT_USER\Environment","MyKey","1",[Microsoft.Win32.RegistryValueKind]::ExpandString)

用户变量位于 HKEY_CURRENT_USER\Environment 中。

系统变量位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 中。


我会立即尝试并感谢您的快速回复,真的非常感激 :-) - ajax
哇,你的解决方案非常棒,向你致敬 :-) 但是还有一个问题,我如何为另一个用户执行此操作 - 例如 - 我已登录为用户A,想要设置用户B的环境? - ajax
你不能轻易地访问另一个用户的注册表。考虑一下,如果有人可以随意向另一个用户的HKCU\Software\Microsoft\Windows\CurrentVersion\Run位置插入任意键值,会发生什么。要么通过登录脚本或类似方式以用户B身份运行脚本,要么使用系统变量。 - vonPryz
@ajax 如果您具备适当的访问级别,您始终可以加载其他用户的Hive。这样,您甚至可以“预热”其他用户的环境。但是,实现这一目标的通常方法是操纵系统范围的环境。 - 0xC0000022L

3

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