PowerShell 是清理闲置 AD 对象最可靠、可审计的自动化手段,核心是“精准识别→安全过滤→分步处置→全程留痕”,需满足 RSAT 安装、权限充足、回收站启用三项前提,按用户/计算机差异筛选,分发现、冻结、清理三阶段执行,并强制 -WhatIf 预览、日志记录与邮件通知。
powershell 是清理闲置 ad 对象最可靠、可审计的自动化手段,核心不是“一键删除”,而是“精准识别 → 安全过滤 → 分步处置 → 全程留痕”。重点在于避免误删关键账户或计算机,同时确保操作可追溯、可回滚。
先确认环境与权限基础
脚本执行前必须满足三项前提:
- 运行机器已安装 RSAT-AD-PowerShell 功能(Windows 10/11 执行:
Add-WindowsCapability -Online -Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0") - 当前账户属于 Enterprise Admins 或具有目标 OU 的写入+删除权限
- AD 回收站(Recycle Bin)已启用——这是误操作后的唯一快速恢复路径,启用命令:
Enable-ADOptionalFeature -Identity "Recycle Bin Feature" -Scope ForestOrConfigurationSet -Target "yourdomain.com"
区分对象类型,用对筛选逻辑
用户和计算机的“闲置”判定依据不同,不能混用同一条件:
-
用户账户:优先用
Search-ADAccount -AccountInactive -UsersOnly -TimeSpan "90:00:00:00"。它自动处理 LastLogonTimestamp 的跨域控复制延迟(默认最多滞后14天),比手动过滤更准确 -
计算机账户:依赖
PasswordLastSet属性(每30天自动更新),筛选超180天未改密的对象更可靠;辅以LastLogonTimestamp和Enabled状态交叉验证 - 两者都需排除高权限组成员(如 Domain Admins)、服务账户(Description 含 “svc”、“service”)、密码永不过期且未登录过的账号
分阶段执行,禁用优于直接删除
生产环境严禁脚本直删。标准流程应为:
- 第一阶段(发现):导出候选对象到 CSV,人工复核名称、OU、描述字段(如含 test、dev、old、migrated 等关键词需单独标记)
-
第二阶段(冻结):对无异议对象执行
Disable-ADAccount,并移入专用 OU(如OU=Stale-Accounts,DC=contoso,DC=com),阻断认证但保留属性 -
第三阶段(清理):冻结满30天后,再执行
Remove-ADUser或Remove-ADComputer,并用-Verbose 2>&1 | Out-File记录完整日志(含 DistinguishedName、时间、执行人)
加日志、加模拟、加通知
每次批量操作都要有安全缓冲:
- 正式执行前必加
-WhatIf预览,例如:Search-ADAccount ... | Disable-ADAccount -WhatIf - 所有操作日志写入带时间戳的文件(如
"C:\AD-Cleanup-$(Get-Date -Format 'yyyyMMdd').log"),包含原始筛选条件与结果数量 - 冻结前向资产责任人发送邮件通知,附清单与反馈截止期(建议14天),逾期未回复视为同意处置

















