我们有大约70名现有员工,但在ActiveDirectory中有178个帐户。 以前的pipe理员不会删除旧帐户,有时甚至没有被禁用。
事实上,我正在考虑手动审查每个帐户,以确定是否可以删除。 有一个更简单的方法来删除基于条件的帐户? 例如,删除(或至less禁用或标记在某个方面)在上个月左右还没有login的用户?
您可以使用dsquery查找不活动的用户:
dsquery user -inactive 10 -limit 0
应该让所有用户停用10周或更长时间。
从dsquery user /?
... -inactive <NumWeeks> Finds users that have been inactive (not logged on) for at least <NumWeeks> number of weeks. ...
如果要从域中删除列表,可以将输出pipe道input到dsrm中。 请注意,这不会引起您的麻烦,所以请慎重使用。
dsquery user -inactive 10 -limit 0 | dsrm -noprompt
看到这个有点相关的问题: 删除域上的旧电脑
如果你只是在一个被调用的batch file的上下文中运行dsquery,并从你的dsquery中select了多个对象,你会得到“dsmove failed(user)是未知参数”。
我有两个批次(一个用于计算机帐户,另一个用于用户帐户),每月从Windows Sch任务运行。 他们有以下代码:
对于电脑:
for /f "Tokens=*" %%s in ('dsquery computer -inactive 5 -limit 0') do ( DSMOVE %%s -newparent "OU=Computers,OU=Quarantine,OU=MyOu,DC=MyDomain,DC=local" )
对于用户:
for /f "Tokens=*" %%s in ('dsquery user -inactive 5 -limit 0') do ( DSMOVE %%s -newparent "OU=Users,OU=Quarantine,OU=MyOu,DC=MyDomain,DC=local" )
我将GPO应用到那些具有login提示的“隔离区”OU,以通知用户该用户帐户或计算机帐户即将被删除,如果他们认为错误,请联系帮助台。 GPO还会执行一些locking操作。 然后,如果我没有看到任何exception(例如长假期或离线,但重要的服务器上的用户),则检查移动的对象以进行手动删除。
如果您想跳过OU移动和审查,可以将“do”dsmove更改为dsrm。
看到这里: Active Directory脚本:DSMOVE失败
如果你是Powershell的粉丝,我会访问www.quest.com并使用他们的Active Directory工具套件。 他们是免费的。
Active Directory的PowerShell命令
用于Active Directory的ActiveRolespipe理shell是一组PowerShell命令,可用于执行和自动化pipe理任务,如发现AD环境,更改用户属性,修改组成员资格,设置新用户帐户以及在Active Directory中执行多个其他任务。