我正在尝试在使用命令行 (cmd.exe) 时为特定用户配置文件创建环境变量。我知道该setx
命令,但无法为用户创建变量。所以我的目标是创建一个特定于用户的环境变量,针对映射的网络驱动器号“M:”。反正?
1 回答
setx
不能为其他用户创建环境变量(尽管它可以创建用户范围的变量),并且它发送WM_SETTINGSCHANGE
消息以通知正在运行的进程环境已更改。
用户范围的环境变量只是注册表值,存储在HKEY_CURRENT_USER\Environment
. 您可以通过修改该键下的值/数据对来为给定配置文件创建一个。但是,修改注册表不会像发送WM_SETTINGSCHANGE
一样发送setx
。
用户配置文件存在
您可以通过加载注册表配置单元为特定用户(其配置文件已存在)创建变量
reg load HKU\ForeignUser C:\Users\<userid>\NTUSER.DAT
(用户无法登录或自 Windows 启动后已登录。NTUSER.DAT
在这些情况下将被锁定。)
然后,您可以执行与该键 ( HKEY_CURRENT_USER\ForeignUser
) 相关的注册表修改命令来创建/修改环境变量。
reg add HKU\ForeignUser\Environment /v ENVVAR_NAME /t REG_SZ /d envvar_value
默认用户配置文件
如果用户从未登录过机器,修改默认用户配置文件将允许您为所有新用户配置文件预先创建环境。
您可以修改默认用户配置文件 ( HKEY_USERS\.Default\Environment
) 以配置环境变量。
reg add HKEY_USERS\.Default\Environment /v ENVVAR_NAME /t REG_EXPAND_SZ /d envvar_value
如果您%USERNAME%
在 _envvar_value_ 中包含或其他一些环境变量,那么您可以使其适用于所有用户。但是,这将为所有第一次登录机器的后续用户创建 envvar。如果您只想为单个用户创建变量,这可能不是最佳解决方案。
全局脚本
或者,您可以创建一个登录脚本(通过在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
; descriptionsetx
下创建一个值来调用),该脚本将使用或注册表修改命令创建 envvar 。如果您只希望它适用于特定用户,则必须检查脚本中的用户名,例如:
IF "%USERNAME%"=="TARGET_USER" SETX ENVVAR_NAME "envvar_value"