我正在尝试为特定的用户configuration文件创build一个环境variables,同时使用命令行(cmd.exe)。 我知道setx
命令,但不能为用户创build一个variables。 所以我的目标是创build一个用户特定的映射networking驱动器号“M:”的环境variables。 无论如何?
setx
不能为其他用户创建环境变量(虽然它可以创建用户范围的变量),并且它发送WM_SETTINGSCHANGE
消息来通知正在运行的环境已经改变的进程。
用户范围的环境变量只是注册表值,存储在HKEY_CURRENT_USER\Environment
。 您可以通过修改该键下的值/数据对,为给定的配置文件创建一个配置文件。 setx
,修改注册表不会发送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
如果在_envvar_value_中包含%USERNAME%
或其他某个环境变量,则可以使其适用于所有用户。 但是,这将为所有后来登录到机器上的用户创建envvar。 如果你只想为单个用户创建的变量,这可能不是最好的解决方案。
或者,您可以使用setx
或注册表修改命令创建登录脚本(通过在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
; description下创建一个值来调用)来创建envvar。 如果您只希望它为特定用户工作,则必须在脚本中检查用户名,例如:
IF "%USERNAME%"=="TARGET_USER" SETX ENVVAR_NAME "envvar_value"