首页/系统/Windows 运维速查/dsquery 清理陈旧计算机对象

dsquery 清理陈旧计算机对象

dsquery computer -inactive 找长期未登录的计算机账号:删前核对资产台账,处理脚本先跑 -limit 与人工清单。

Windows 运维速查系统更新于 2026-10-13

陈旧计算机对象的清理

域里的计算机账户会随设备更换、重装与报废不断累积。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 个月”完全不同,参数写错会从“几乎没筛掉”变成“误伤大量在用设备”。
长期离线的资产(库房备用机、季节性设备、灾区待部署设备)都会呈现“未活动”,清理前把它们从名单里排除,是避免事故的关键一步。

易错点

  • 把 -inactive 的单位当天数:口径错了,结果从无害变成大面积误删
  • 不看清单直接批量删除:备用设备与临时离线资产被误删,恢复要重新入域
  • 用 inactive 单一判据:离网设备的密码不会更新,未活动不等于不使用
  • 删除不留记录:日后核查设备来源、审计变更时没有任何依据
  • 把它当一次性任务:目录会持续累积,应纳入定期的季度清理流程

数据来源与参考

  • Microsoft Learn:dsquery computer
  • Microsoft Learn:dsrm

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌