2023年12月8日发(作者:)

一、测试环境:

VMware Workstation 7.1

Server 2003 Enterprise Edition SP1(简体中文版)

AD帐户1000个

(命令添加方法:for /l %i in (1,1,1000) do net user test%i abc@123 /add)

(批处理添加方法:for /l %%i in (1,1,1000) do net user test%%i abc@123

/add),单百分号(%)变双百分号(%%)。

二、帐户被锁的原因

在AD里面都有着它的安全设置,比如说密码策略和帐户锁定策略

而帐户锁定策略可以设置锁定的阈值和锁定时间,多少次无效登陆后,帐户将会被锁定多久。 而帐户一旦被锁,则在被锁定的时间里很多网络资源无法访问,甚至让用户无法登陆电脑。

有时候人为的原因,忘记密码或键盘出错致使密码输错超过阈值后导致用户被锁,这种人为的原因引起的用户被锁数量不多,可以手动处理。

另一种由病毒引起的则可能在非常短的时间里导致多个用户被锁,手动一个个解锁,很麻烦,不知道谁被锁了,下一个被锁的帐户又是谁,要一个一个的找,并且可能刚解锁不久的帐户等你解锁到一半时又被锁了,处理起来很麻烦。你流了汗水也得不到别人的认同,甚至会被哪些锁了又锁的帐户极度埋怨。因此不得不把AD的安全阈值降低。

三、解锁的方法有两种: 1、AD用户管理界面里解锁。

2、命令行解锁:

net user

username /active

/active后面还有参数,yes或no,默认的参数是yes,完整的命令是:

net user

username /active:yes ,注意它不但会解锁被锁的帐户,还会启用被禁用的用户,这就是后面要查找“已锁定”的原因。

为了找到一种更快的方法解锁所有被锁的域用户,得先做一些测试。而AD里一个帐户有三种状态:被锁定、正常、被禁用。

先把这三种信息都取下来,做一个对比。

1、一个被锁的帐户信息(test10) 2、正常的帐户信息(test99):

3、被禁用的帐户: 这些信息不同之处都在net user

username 命令后的“帐户启用”一行:

被锁的帐户---已锁定

正常的帐户---Yes

被禁用的帐户--No

因此只要使用net user

username

命令找出所有“已锁定”的帐户再对其解锁即可。

如果一个一个用户名来输入,net user

username

net user test1

net user test2

net user test3 „„

net user testN

„„

net user test1000

如果帐户不多只有十来个或几十来个的时候还可以让手指头多锻炼锻炼,而当AD里面的帐户很多,几百甚至上千的时候这种方法显然是不可取的。这时应该使用for命令。(for的用法很多,可以for /?来参照使用)

下面来一组逐层递进的假设:

1、有规则的用户名:test1、test2、test3„testN„test1000

第一个假设是有规律的用户名,因为用户都有test,后面的是随着数字的增加而增加可使用这条命令: for /l %i in (1,1,1000) do net user test%i(命令行)

for /l %%i in (1,1,1000) do net user test%%i(批处理)

2、没有规则的用户名,根据名字的拼音来编定:zhangsan、lishi、„wangwu„

这里还是以test1到test1000来操作,这时不能再用for /l的参数了。而for里面有一个参数/f 是对文件操作的,只要把这些用户名都放到一个文件里,就可以通过for命令来操作。而这些文件名可以使用 net user 来获得。因用户较多,这里用net user | more来查看。

可以看到这些用户名就是除去前面的4行后(包括空白的),它分成三列,每列中间是多个空格的分隔符。

For的命令非常强大,它还有另外的skip和tokens参数,可以使用这些参数把用户名都提取到一个的文件里。

提取用户名的批处理():

Rem 关闭回显

@echo off

Rem 跳过前面4行;以空格为分隔符,提取net user命令获得的第一列、第二列、第三列用户名

for /f "skip=4 tokens=1-3" %%i in ('net user') do ( rem 第一列用户名列表输出到文件,(>>为文件追加,如果为>则为文件覆盖)

echo %%i>>

rem 第二列用户名列表输出到文件

echo %%j>>

rem 第三列用户名列表输出到文件

echo %%k>>

)

至此所有用户名输出到的文件中. 用户名提取出来了,使用for /f 文件操作参数.

For /f %%i in () do net user %%i && pause

这时每个用户的信息均可显示出来了,并可以一个一个的查看,再回过头来,

我们要找的是带有“已锁定”的信息的用户名。 因为“已锁定”的信息对应着的就是被锁的帐户。

因此先看被锁的用户名它的信息“已锁定”怎么获取。使用find命令:

Net user test10 | find "已锁定"

获得的信息是: “帐户启用 已锁定”

此时能再来确定帐户名离成功就不远了。

可以这样子想,当它找到“已锁定”的信息时就显示用户名。 @echo off

rem 如果找到“已锁定”则显示用户名。

for /f %%i in () do (net user %%i | find "已锁定" && echo %%i)

rem 上面的修改一下,如果找到“已锁定”则解锁哪个用户名(如果不查找已锁定的用户,则被禁用的

rem 帐户也会被激活)。

for /f %%i in () do (net user %%i | find "已锁定" && net user %%i

/active)

rem pause可以不要,在此只是便于调试。

pause

后面的找不到用户的原因是,用户名最后有四行是(下图):

ECHO 处于关闭状态。

命令成功完成。 ECHO 处于关闭状态。

ECHO 处于关闭状态。

这些影响不到程序的正常运行,可以不管。

3、基于第2个假设是有一个用户名的列表,然而总会有些人因为某种原因离去,帐户就会被删除,也总有些新的人员到来,AD里面的用户名列表就不再是固定的了。离去的人员帐户就会被删除掉,进来的人员就会开新的帐户。因此这个文件会常常变。但是它总可以使用net user来获得。

再进一步,不要这个文件,直接使用net user来获得当前所有AD用户.

再回头看看,里面的用户列表是怎么获得的。

读史可以明智,回头只是想让自己更清醒点。

for /f "skip=4 tokens=1-3" %%i in ('net user') do (

echo %%i>>

echo %%j>>

echo %%k>>

)

现在可以把这些假设综合起来:

下面的批处理解锁AD所有被锁帐户:

@echo off

Rem 获取所用用户列表

for /f "skip=4 tokens=1-3" %%i in ('net user') do (

Rem 获取第一列每个用户信息的第二列信息,并查找被锁帐户并解锁

for /f "tokens=2" %%u in ('net user %%i ^| find /i "已锁定"') do net

user %%i /active

Rem 获取第二列每个用户信息的第二列信息,并查找被锁帐户并解锁

for /f "tokens=2" %%u in ('net user %%j ^| find /i "已锁定"') do net

user %%j /active Rem 获取第三列每个用户信息的第二列信息,并查找被锁帐户并解锁

for /f "tokens=2" %%u in ('net user %%k ^| find /i "已锁定"') do net

user %%k /active

然而有些帐户可能反复被锁,再加一个死循环,反复解锁。

@echo off

rem 设置循环标签,unlock

:unlock

for /f "skip=4 tokens=1-3" %%i in ('net user') do (

for /f "tokens=2" %%u in ('net user %%i ^| find /i "已锁定"') do net

user %%i /active

for /f "tokens=2" %%u in ('net user %%j ^| find /i "已锁定"') do net

user %%j /active

for /f "tokens=2" %%u in ('net user %%k ^| find /i "已锁定"') do net

user %%k /active

rem 延时180个ping的计数时,大约为3分钟,时间可自定

ping 127.0.0.1 -n 180>nul

rem 跳到循环标签unlock处

goto unlock

END(最后的也是最重要的):

一、查安全日志,找出中毒的电脑。嘿,随你怎么修理了„„

二、使用微软的Altools工具读取日志查找。

Altools查找

1、运行: 2、选择Account Lockouts,再search

3、程序运行完毕,将会在C盘生成一个-Security_LOG.的日志文件。

4、打开-Security_LOG.的日志文件(此图较长,分段截图)

被锁的帐户(目标帐户名)

调用方机器名即为中毒电脑