更改当前登录 Windows 用户的注册表值,当 运行 脚本作为 SYSTEM 用户时(批处理)
change registry value for currently logged in Windows user, when running script as SYSTEM user (batch)
我在批处理脚本中有这段代码。
REG ADD HKEY_CURRENT_USER\MyKey /ve /t REG_DWORD /d 1 /f
问题是脚本 运行 使用系统帐户作为 Windows 中的计划任务。当使用系统帐户 运行 任务时,它不会将值应用于当前登录的 Windows 用户的注册表。我找不到方法来设置任务以使用当前登录的用户,因此不得不将其设置为使用系统帐户。
我尝试使用 this 解决方案;但是它不适用于当前登录的用户,因为 NTUSER.DAT 文件正被另一个进程使用。
我还尝试导入 .reg 文件;但是,这也不适用于当前登录的用户。
如何将设置应用到 HKEY_USERS\*\MyKey
?最好使用批处理?或者我如何 运行 作为当前登录的 Windows 用户执行计划任务?
首先通过 WMI 解析 SID,然后将 SID 填入 reg 命令。试试吧..
for /f "delims=" %a in ('wmic useraccount where "name='%username%'" get sid') do for /f "delims=" %b in ("%a") do REG ADD HKEY_CURRENT_USER\%b /ve /t REG_DWORD /d 1 /f
我用下面的代码解决了这个问题。 (当然要替换 MyKey)
这将仅适用于登录用户注册表。因为我是 运行 应用程序启动时的这段代码,在它读取注册表之前,这对我的情况很有效。
SETLOCAL ENABLEDELAYEDEXPANSION
for /f %%A in ('reg query HKEY_USERS') do (
set hive=%%A
if "!hive:~11,8!"=="S-1-5-21" (
if not "!hive:~-7!"=="Classes" (
REG ADD !hive!\MyKey /ve /t REG_DWORD /d 1 /f
)
)
)
endlocal
如果您想应用于所有用户,无论是否登录,那么这应该可以实现。
SETLOCAL ENABLEDELAYEDEXPANSION
for /f %%A in ('reg query HKEY_USERS') do (
set hive=%%A
if not "!hive:~-7!"=="Classes" (
REG ADD !hive!\MyKey /ve /t REG_DWORD /d 1 /f
)
)
endlocal
我在批处理脚本中有这段代码。
REG ADD HKEY_CURRENT_USER\MyKey /ve /t REG_DWORD /d 1 /f
问题是脚本 运行 使用系统帐户作为 Windows 中的计划任务。当使用系统帐户 运行 任务时,它不会将值应用于当前登录的 Windows 用户的注册表。我找不到方法来设置任务以使用当前登录的用户,因此不得不将其设置为使用系统帐户。
我尝试使用 this 解决方案;但是它不适用于当前登录的用户,因为 NTUSER.DAT 文件正被另一个进程使用。
我还尝试导入 .reg 文件;但是,这也不适用于当前登录的用户。
如何将设置应用到 HKEY_USERS\*\MyKey
?最好使用批处理?或者我如何 运行 作为当前登录的 Windows 用户执行计划任务?
首先通过 WMI 解析 SID,然后将 SID 填入 reg 命令。试试吧..
for /f "delims=" %a in ('wmic useraccount where "name='%username%'" get sid') do for /f "delims=" %b in ("%a") do REG ADD HKEY_CURRENT_USER\%b /ve /t REG_DWORD /d 1 /f
我用下面的代码解决了这个问题。 (当然要替换 MyKey)
这将仅适用于登录用户注册表。因为我是 运行 应用程序启动时的这段代码,在它读取注册表之前,这对我的情况很有效。
SETLOCAL ENABLEDELAYEDEXPANSION
for /f %%A in ('reg query HKEY_USERS') do (
set hive=%%A
if "!hive:~11,8!"=="S-1-5-21" (
if not "!hive:~-7!"=="Classes" (
REG ADD !hive!\MyKey /ve /t REG_DWORD /d 1 /f
)
)
)
endlocal
如果您想应用于所有用户,无论是否登录,那么这应该可以实现。
SETLOCAL ENABLEDELAYEDEXPANSION
for /f %%A in ('reg query HKEY_USERS') do (
set hive=%%A
if not "!hive:~-7!"=="Classes" (
REG ADD !hive!\MyKey /ve /t REG_DWORD /d 1 /f
)
)
endlocal