如何删除域内非活动计算机账号?

 

本文介绍了删除一段时间没有登入域的非活动计算机账号的方法。

 
 

内管理很多用户和计算机,但是常常有无用的用户和计算机没有退出域,而浪费域内的资源。如何删除一段时间内没有登录域非活动计算机账号呢?下文给出了详细的描述。

命令:dsquery

http://technet.microsoft.com/en-us/library/cc755655.aspx

工具:oldcmp

使用OldCmp,你可以搜索、禁用或者删除非活动计算机账号。甚至更好的是,你可以创建一个简单的批处理文件来使这个过程自动化。

当你用OldCmp来执行一个搜索的时候,你必须指定以下三种可能选项中的至少一种:

 

-report(生成一张列有非活动计算机账号的HTML报告列表)

-disable(禁用非活动计算机账号)

-delete(删除非活动计算机账号)

如果你运行OldCmp时只加了-report选项,它会搜索你默认域中所有计算机密码老化日期大于90天的计算机对象,并且把结果生成为一个HTML报告。如果你的域非常大,并且里面有很多计算机账号,这条命令可能得花上一段时间来执行完毕。为了减少OldCmp的运行时间,你可以使用-b选项来指定一个特定的组织单元。

OldCmp生成的HTML文件会被放到该工具的运行目录下,除非你用-file选项指定了一个替换位置。如果你包括了-sh选项,OldCmp会在生成HTML文件后自动打开它。

 

如果你想定期地生成HTML报告,你所需要做地全部就是创建一个只包含两行代码的批处理(.bat)文件,如表1所示。其中第一行运行OldCmp,而第二行运行Blat。Blat是一个把文件内容通过电子邮件发送出去的工具,你可以从http://blat.net下载该工具。在第二行中,注意用-to选项设置你自己的电子邮件地址。另外,确认OldCmp和Blat都被放到了你的运行路径下(即在PATH环境变量中定义的路径)。

 

建立了批处理文件之后,你需要创建一个计划任务。确认你为其指定了一个合适的域账号和密码,使该脚本有足够的权限在域中查询计算机对象。

 

辨别非活动计算机账号很有帮助,但更可能的是,你有时候想清除那些账号。我的一般建议是先禁用那些非活动账号,然后经过一个星期或一个月的观察,再删除那些禁用了的账号。这样能保证确实没有人在使用我们删掉的那些账号。

 

表2包含的批处理文件是用来删除禁用的计算机账号,以及禁用新发现的非活动计算机账号的。这个批处理文件有两段命令(注意不要交换次序)。第一段用OldCmp删除禁用了的计算机账号,并且创建deleted_comps.html报告,接着用Blat把该报告发送到XXX@XXX.com。第二段用OldCmp禁用所有计算机密码旧于180天的计算机账号,并且创建disabled_comps.html报告,接着用Blat发送该报告。

 

在写OldCmp的时候,Joe考虑到人们可能会意外地删除或禁用数以千计的计算机账号,所以他加了一些预防措施,包括你所见到的在每个命令集中都有的-safety和-forreal选项。-safety选项用来限制脚本所能删除或者禁用的账号数量。默认情况下,OldCmp不会删除或禁用超过10个账号。若把-safety选项值设为100,则OldCmp最多可以删除100个账号。-forreal选项用来真正删除或者禁用账号。如果不用-forreal选项,OldCmp只会报告它要删除或禁用的账号,而不会真正地删除或者禁用它们。

 

在使用表2中的批处理文件之前,你需要自定义在两行Blat命令中的电子邮件地址。此外切记,为了测试,你应该先去掉两行OldCmp命令中的-forreal选项,然后运行批处理文件来确定OldCmp将要删除或者禁用的账号无误。

 

 

表1:建立非活动计算机账号报告的批处理文件

 

oldcmp-report-filec:\inactive.html

 

blatc:\inactive.html-toXXX@XXX.com-html

 

表2:删除被禁用的计算机账号和禁用新发现的非活动计算机账号的批处理文件

 

oldcmp-delete-onlydisabled-safety100-forreal-append-filec:\deleted_comps.html

 

blatc:\deleted_comps.html-toXXX@XXX.com-html

 

oldcmp-disable-age180-safety100-forreal-append-filec:\disabled_comps.html

 

blatc:\disabled_comps.html-toXXX@XXX.com-html

希望本文介绍的删除域内非活动计算机账号的方法能够对读者有所帮助。

 
如果我们的域是Windows 2003域,我们可以通过dsquery命令的inactive参数排查出一段时间没有活动的计算机。

附件中包含两个cmd的文件,内容分别如下:
 
DisableComputer.CMD
dsquery computer -inactive 10 -stalepwd 70 |dsmod computer -disabled yes
 
查处10周未登陆的机器以及70天未能更改域计算机密码的机器(数值可自行指定),然后把它们设成disabled。
 
备注:-inactive指得是机器未logon的时间,-stalepwd是机器密码未改的时间,windows 2000以上的机器默认为30天,我们可以两者结合来看看哪些是非active的机器。如果要用-inactive参数,需要2003纯模式。如果单单使用-stalepwd,可以在混合模式下运行。
 
dsquery对于不活动时间越长的计算机越正确。造成这一现象的原因是Active Directory是根据计算机是否验证身份来判断其是否活动的。一台1个月没有开机的计算机当然是不活动的,但是一台开机但是一个月无人操作的计算机也会被判断为不活动的,而第二种情况在服务器上是比较常见的(比如文件共享服务器)。所以我们不能根据dsquery结果立刻删除计算机帐号,还需要做一些验证工作(比如查询这一计算机名的IP)。
 
DeleteComputer.CMD
dsquery computer -disabled | dsrm –noprompt
 
查出禁用机器然后删掉。
备注:建议在使用DisableComputer.CMD两周之后,没有用户报错的情况下再使用DeleteComputer.CMD来删除域中多余的计算机帐号。
 
了解dsquery的更多信息,请参考下面这篇文章: