我们目前有大约 70 名员工,但 ActiveDirectory 中有 178 个帐户。前任管理员从未删除过旧帐户,有时甚至没有禁用它们。
事实上,我正在考虑手动检查每个帐户以确定是否可以删除。有没有更简单的方法可以根据条件删除帐户?例如,删除(或至少以某种方式禁用或标记)过去一个月内未登录的用户?
答案1
您可以使用以下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.
...
如果您想从域中删除列表,可以将输出导入 dsrm。请注意,这不会提示您,因此请谨慎行事。
dsquery user -inactive 10 -limit 0 | dsrm -noprompt
请参阅这个有点相关的问题: 删除域中的旧计算机
答案2
如果您只是在被调用的批处理文件的上下文中运行 dsquery,并且从 dsquery 中选择了多个对象,那么您将得到“dsmove 失败(用户)是一个未知参数”。
我有两个批次(一个用于计算机帐户,一个用于用户帐户),它们每月从 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 应用于那些具有登录提示的“隔离”OU,以通知用户用户帐户或计算机帐户将被删除,并在他们认为有误时联系帮助台。GPO 还会执行一些锁定操作。然后,如果我没有看到任何异常(例如用户正在长期休假或离线但重要的服务器),我会检查移动的对象以进行手动删除。
如果您想跳过 OU 移动和审查,您可以将“do” dsmove 更改为 dsrm。
答案3
如果您是 Powershell 的粉丝,我建议您访问 www.quest.com 并使用其 Active Directory 工具套件。它们是免费的。
Active Directory 的 PowerShell 命令
Active Directory 的 ActiveRoles 命令行管理程序是一组 PowerShell 命令,可用于执行和自动执行管理任务,例如发现 AD 环境、更改用户属性、修改组成员身份、配置新用户帐户以及在 Active Directory 中执行其他多个任务。