域环境下组策略统一修改终端本地管理员密码

公司域环境里,有些客户端计算机的本地 Administrator 账号密码为空或者是弱密码,不安全。打算用组策略统一改掉,同时把修改成功还是失败的结果自动追加到共享目录的日志文件里,方便统计。

脚本准备与存放路径

脚本建议放在域控的 SYSVOL 共享目录下,这样客户端都能访问到: \\company.com\SYSVOL\company.com\scripts\

这里准备了两个版本的批处理,按需选择:

版本 A:基础版

每次开机都无脑执行一次,当然你也可以在计划任务中规定脚本的运行方式,次数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@echo off
setlocal

set LOGFILE=\\192.168.1.250\log\admin_change.log
set DATE=%date% %time%
set PC=%COMPUTERNAME%

REM 修改管理员密码
net user Administrator P@ssw0rd2026 >nul 2>&1

if %errorlevel%==0 (
    echo %DATE%  %PC%  SUCCESS >> %LOGFILE%
) else (
    echo %DATE%  %PC%  FAILED  ERRORLEVEL=%errorlevel% >> %LOGFILE%
)

endlocal
exit /b 0

版本 B:升级版

通过注册表判断,执行过就不再执行,且有日志回写

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
setlocal

set LOGFILE=\\192.168.1.250\log\admin_change.log
set DATE=%date% %time%
set PC=%COMPUTERNAME%

REM 判断是否已经执行过
reg query HKLM\Software\AdminPwdFix /v Done >nul 2>&1
if %errorlevel%==0 (
    echo %DATE%  %PC%  SKIPPED  ALREADY_EXECUTED >> %LOGFILE%
    exit /b 0
)

REM 修改管理员密码,并把所有输出写入日志
net user Administrator P@ssw0rd2026 >> %LOGFILE% 2>&1

if %errorlevel%==0 (
    echo %DATE%  %PC%  SUCCESS >> %LOGFILE%
    REM 写入执行标记
    reg add HKLM\Software\AdminPwdFix /v Done /t REG_SZ /d 1 /f >nul 2>&1
) else (
    echo %DATE%  %PC%  FAILED  ERRORLEVEL=%errorlevel% >> %LOGFILE%
)

endlocal
exit /b 0

日志文件权限设置

日志回写路径:\\192.168.1.250\log\ 注意: 这个共享文件夹必须确保开放了写入权限,否则客户端执行了脚本也拿不到回显日志。

创建组策略(GPO)

打开组策略管理,新建一个 GPO: 进到 计算机配置 -> 首选项 -> 控制面板设置 -> 计划任务。 这里为了方便演示,直接用 即时任务(Immediate Task)

配置好后,把这个组策略链接到目标 OU 上。

最终效果

当客户端计算机刷新组策略时,任务会自动触发执行,看一眼服务器上的日志,回写正常:

拿新设置的密码去登录本地 Administrator 账号,测试登录成功。

补充踩坑:如果被杀毒软件(如火绒)拦截怎么办?

测试时发现,部分装了杀毒软件(如火绒)的终端会弹窗拦截这个批处理的动作。

绕过拦截的解决办法: 那就不使用批处理文件,在组策略的“计划任务”里编辑刚刚的操作:

程序/脚本 改写为:powershell.exe

添加参数 填入以下整行命令:

参数自行修改

1
-NoProfile -ExecutionPolicy Bypass -Command "$pc=$env:COMPUTERNAME;$date=Get-Date -Format 'yyyy-MM-dd HH:mm:ss';$log='\\192.168.1.250\log\admin_change.log';try{$u=[ADSI]'WinNT://./Administrator,user';$u.SetPassword('P@ssw0rd2026');$u.SetInfo();Add-Content $log \"$date $pc SUCCESS\"}catch{Add-Content $log \"$date $pc FAILED $_\"}"

复盘结论: 火绒等杀软主要盯着的是隐藏窗口执行的 PowerShell(比如带 -WindowStyle Hidden)或者是脚本链的连续调用(如 BAT 调 VBS,或者 BAT 再调 PS1)。 一旦执行链条太复杂或者带了敏感隐藏参数,就会触发杀软的行为防御。 而直接通过 PowerShell -Command 执行内联命令,并且不特意隐藏窗口,行为特征更接近管理员的日常正常操作,反而能完美避开拦截。

Created by aka.g