You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量脚本配置AutoAdminLogon注册表项时获取当前普通用户名的问题

批量脚本配置AutoAdminLogon注册表项时获取当前普通用户名的问题

嗨,这个问题我碰到过不少次,核心原因很明确:当你用管理员权限运行批处理脚本时,脚本的运行上下文切换到了管理员账户,所以%USERNAME%自然会读取管理员的用户名,而不是原本启动脚本的普通用户。结合你要批量处理30+台电脑的需求,给你两个适配的解决方案,覆盖你提到的两种场景:

方案一:用脚本文件名作为目标用户名

如果你已经把脚本文件名设置为对应用户名(比如JaneSmith.bat就对应用户JaneSmith),这个方案最省心,完全不需要额外获取用户信息:

@echo off
:: 用脚本文件名(不含扩展名)作为目标用户名
set "TARGET_USER=%~n0"

:: 强制覆盖注册表项,无需手动确认
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "%TARGET_USER%" /f
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "Test" /f
  • 关键说明:%~n0是批处理的特殊内置变量,会自动提取当前脚本的文件名(不含.bat后缀),你只需要给每个用户的脚本按用户名命名,分发运行即可。

方案二:自动获取当前登录的交互式普通用户

如果不想依赖脚本命名,想直接获取当前电脑上登录的普通用户,不管脚本是不是用管理员权限运行,可以通过WMI命令查询系统当前登录用户:

@echo off
:: 从系统中提取当前交互式登录的用户名
for /f "skip=1 tokens=2 delims=," %%a in ('wmic computerSystem get username /format:csv') do (
    set "TARGET_USER=%%a"
    goto :end_query
)
:end_query

:: 写入注册表项
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "%TARGET_USER%" /f
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "Test" /f
  • 关键说明:wmic computerSystem get username会返回当前登录的用户账户,通过for循环处理输出内容,提取出纯用户名。这个方法在单用户登录的场景下非常可靠,如果有多用户同时登录,可能需要额外判断,但一般办公场景都是单用户登录。

额外注意事项

  • 所有reg add命令加上/f参数,可以强制覆盖已有的注册表项,避免脚本运行时弹出确认提示,更适合自动化批量执行。
  • 批量部署的话,你可以用组策略、PDQ Deploy这类工具分发脚本,或者结合方案一,把命名好的脚本批量推送到对应电脑执行。

备注:内容来源于stack exchange,提问作者Sploman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:08:19