Batch file 以系统用户身份运行脚本时,更改当前登录的Windows用户的注册表值(批处理)

Batch file 以系统用户身份运行脚本时,更改当前登录的Windows用户的注册表值(批处理),batch-file,scheduled-tasks,Batch File,Scheduled Tasks,我有一个批处理脚本中的代码 REG ADD HKEY_CURRENT_USER\MyKey /ve /t REG_DWORD /d 1 /f 问题在于,在Windows中,脚本是使用系统帐户作为计划任务运行的。使用系统帐户运行任务时,不会将该值应用于当前登录的Windows用户注册表。我找不到将任务设置为使用当前登录的用户的方法,因此必须将其设置为使用系统帐户 我试图使用解决方案;但是,它不适用于当前登录的用户,因为另一个进程正在使用NTUSER.DAT文件 我还试图导入一个.reg文件;但是

我有一个批处理脚本中的代码

REG ADD HKEY_CURRENT_USER\MyKey /ve /t REG_DWORD /d 1 /f
问题在于,在Windows中,脚本是使用系统帐户作为计划任务运行的。使用系统帐户运行任务时,不会将该值应用于当前登录的Windows用户注册表。我找不到将任务设置为使用当前登录的用户的方法,因此必须将其设置为使用系统帐户

我试图使用解决方案;但是,它不适用于当前登录的用户,因为另一个进程正在使用NTUSER.DAT文件

我还试图导入一个.reg文件;但是,这也不适用于当前登录的用户


如何将设置应用于
HKEY\U用户\*\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

我用下面的代码解决了这个问题。(当然要更换我的钥匙)

这将仅适用于已登录的注册表用户。由于我在应用程序启动时运行这段代码,在它读取注册表之前,这对我的情况非常有效

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

如果任务是在正确的用户配置文件下运行的,那么总体思路似乎是正确的。然而,我不相信你目前的代码是完全有。您的第一个循环可能会受到unicode WMIC输出问题的影响,我假设HKCU也应该是HKU。请考虑您上面使用的方法对无法加载的配置单元有效,因为它们已经在使用中。一个健壮的脚本将尝试使用其中一个,然后在第一个指示失败时使用另一个。我只需要将该设置应用于当前登录的用户,因此尝试加载NTUSER.DAT文件对我来说是不可能的。如果用户已登录,则不会加载。对于这个用例,我并不真正关心未登录的用户;不过,在其他情况下知道这一点很好。我知道,阿切尔,你是对的。我之前的评论是为了向其他人澄清,您的解决方案虽然满足了您的特定需求,但并非对所有用户都是健壮的解决方案。如果您认为这是对您的解决方案的批评,我向您道歉。@Compo,我根本不认为这是批评。我可以肯定地看到,首先使用.dat文件是明智的,然后当它无法对当前登录的用户应用“reg查询”时。我将来在部署软件时可能会使用这种方法。。。我想理解为什么使用.DAT文件更健壮。它不是更健壮,我提到的健壮性是允许修改,不管用户当前是否登录。我肯定有过
reg unload
失败的例子,如果处理不当,可能会导致损坏。一个完全健壮的解决方案可能包括在任何更改之前和之后备份用户注册表的建议。