陈旧计算机对象的清理
域里的计算机账户会随设备更换、重装与报废不断累积。dsquery computer -inactive 按“多少周没有更新密码”筛出长期未与域联系的计算机对象,再配合 dsrm 删除。清理的价值是减小目录规模、消除被滥用的凭据对象;风险是 -inactive 依据的是计算机账户密码变更周期(默认 30 天),临时长期离线的资产可能被误判。
基本信息
| 适用平台 | Windows Server(AD DS 角色)与装 RSAT 的管理机 |
|---|---|
| 筛选 | dsquery computer -inactive <周数> -limit 0 |
| 删除 | dsrm -noprompt "DN"(配合 -noprompt 免交互) |
| 判据说明 | inactive 基于计算机账户密码最后变更时间,而非最后登录时间 |
| 补充手段 | ldifde/Get-ADComputer -Filter 可做更细的筛选与导出 |
典型使用场景
- 资产盘点:找出不再入域的计算机账户,与资产台账对账
- 目录瘦身:清理多年累积的报废设备对象
- 安全治理:减少可被利用的计算机账户数量
- 重装设备处理:确认旧对象已被清理,避免同名冲突
- 定期维护:把清理脚本纳入季度运维流程
常用示例
常用示例
:: 先看样本:12 周未活动的计算机对象,最多列 20 条
dsquery computer -inactive 12 -limit 20
:: 导出全量清单供人工核对(不要直接删除)
dsquery computer -inactive 12 -limit 0 > stale_pcs.txt
:: 按名称限定范围,缩小误伤面
dsquery computer -inactive 24 -name "PC-*" -limit 0 > stale_pcs2.txt
:: 核对无误后逐个删除(建议配合日志记录)
dsrm -noprompt "CN=PC-001,OU=Workstations,DC=corp,DC=local"
:: 用 PowerShell 做更精确的筛选(含最后登录时间)
Get-ADComputer -Filter * -Properties LastLogonTimeStamp | Where-Object { $_.LastLogonTimeStamp -lt (Get-Date).AddDays(-180) } | Select-Object Name, LastLogonTimeStamp判据对比
| 判据 | 含义 | 适用性 |
|---|---|---|
| 密码最后设置时间 | inactive 依据的字段 | 默认 30 天一变,离网设备会累积 |
| LastLogonTimeStamp | 最后登录时间(近似值) | 更贴近“是否还在用”,需属性支持 |
| LastLogonDate | 转换后的可读时间 | 便于人工核对 |
| 对象创建时间 | whenCreated | 识别批量导入的历史对象 |
删除计算机对象会让该设备下次入域时被当作新设备处理,可能需要重新处理信任关系与基于对象 SID 的权限。误删的恢复成本高,务必先导出清单、人工对账、再分批执行。
-inactive 的数字单位是“周”。写 12 表示 12 周,与“12 天”或“12 个月”完全不同,参数写错会从“几乎没筛掉”变成“误伤大量在用设备”。
长期离线的资产(库房备用机、季节性设备、灾区待部署设备)都会呈现“未活动”,清理前把它们从名单里排除,是避免事故的关键一步。