公司域环境里,有些客户端计算机的本地 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 执行内联命令,并且不特意隐藏窗口,行为特征更接近管理员的日常正常操作,反而能完美避开拦截。