Active Directory 工具学习笔记(10.13):AdRestore——把误删“拉回现场”的最快姿势

Active Directory 工具学习笔记(10.13):AdRestore------把误删"拉回现场"的最快姿势

Active Directory 工具学习笔记(10.13):AdRestore------把误删"拉回现场"的最快姿势

目标:把 误删用户/组/计算机/OU 在最短时间内拉回。本文聚焦 Sysinternals 的 AdRestore ,并补齐与 AD 回收站、PowerShell 的配合要点与风险兜底。


一、AdRestore 是什么?适用在哪些现场

AdRestore.exe 是 Sysinternals 的轻量命令行工具,用于从 "已删除对象(Deleted Objects)" 容器枚举并恢复对象(常见:用户、组、计算机、OU)。

它不依赖图形界面,适合远程壳/应急场景:拿到 DC 上的管理员命令行即可操作。

你何时选它?

  • 误删对象,且你希望不进 GUI快速批量点名恢复。
  • 你还没(或暂时不能)启用「AD 回收站图形管理」,但被删时间仍在 Tombstone/DeletedObject 生命周期内
  • 你要先恢复到隔离 OU,再补权限/组成员,最后移回业务 OU。

一句话定位:它是"从墓地拉回尸体"的脚手架;恢复后要做"缝合"------启用账号、回填组、重置密码/密钥、再移动 OU。


二、必要前提与权限清单

  • 权限:企业/域管理员,或被委派了对 "Deleted Objects" 容器的恢复权限。
  • 时间 :对象仍处于可恢复期(取决于 msDS-DeletedObjectLifetime,默认与 Tombstone 相同,传统 60/180 天,视林功能级别与环境策略)。
  • 位点 :在 域控 上执行,或使用带有 RSAT/目录工具的安全管理工作站(确保对 DC LDAP/GC 通路正常)。
  • 合规 :批量恢复前走变更/审批,恢复操作要留痕(日志/命令输出保存)。

三、核心语法与常用参数

在 DC 上以管理员打开命令行:

cmd 复制代码
AdRestore.exe               :: 列举"已删除对象"容器里的对象(交互式选择恢复)
AdRestore.exe /server:dc1   :: 指定域控
AdRestore.exe /filter:"(sAMAccountName=bob)"        :: 过滤查询
AdRestore.exe /filter:"(&(objectClass=user)(cn=*Sales*))"
AdRestore.exe /restore      :: 直接执行恢复(默认到原 OU)
AdRestore.exe /restore /quiet  :: 静默恢复(配合批处理)

实战模板

  • 恢复单用户(交互确认):
cmd 复制代码
AdRestore.exe /filter:"(sAMAccountName=bob)" /restore
  • 批量恢复某 OU 下被删用户(静默):
cmd 复制代码
AdRestore.exe /server:dc1 ^
  /filter:"(&(objectClass=user)(lastKnownParent=OU=Sales,DC=corp,DC=local))" ^
  /restore /quiet

小贴士:lastKnownParent 非常好用------它记录对象被删前所在的 OU,便于批量筛选。


四、推荐流程:隔离恢复 → 四件套补缀 → 验证后归位

AdRestore 默认恢复回原 OU。为了防再度被策略/脚本改写,建议这样做:

  1. 先建隔离 OUOU=Recovery,DC=corp,DC=local(阻止继承、临时策略最小化)。
  2. 用 AdRestore 恢复到原 OU 或者先到隔离 OU (若用 PowerShell Restore-ADObject 可直接指定 -TargetPath;AdRestore 恢复后再移动也可)。
  3. "四件套补缀" (以 PowerShell 执行):
    • 启用账号:Enable-ADAccount
    • 重置密码/密钥:Set-ADAccountPassword / 计算机信任 Reset-ComputerMachinePassword
    • 要求下次登录改密:-ChangePasswordAtLogon $true
    • 回填组成员/memberOf(基于你之前导出的基线 CSV)
  4. 验证通过 → 移回业务 OU → gpupdate /force

示例脚本(用户)

powershell 复制代码
$u = "bob"
Enable-ADAccount -Identity $u
Set-ADAccountPassword $u -Reset -NewPassword (ConvertTo-SecureString "Temp#2025!" -AsPlainText -Force)
Set-ADUser $u -ChangePasswordAtLogon $true
# 回填组(从基线CSV加载)
# Import-Csv .\baseline_groups.csv | ?{ $_.User -eq $u } | %{
#   Add-ADGroupMember -Identity $_.Group -Members $u
# }
Move-ADObject -Identity (Get-ADUser $u).DistinguishedName -TargetPath "OU=Recovery,DC=corp,DC=local"

五、与 PowerShell / AD 回收站的"配合拳"

PowerShell(更灵活)

当你需要指定目标 OU、批量加工属性、恢复嵌套容器/OU,建议用 PowerShell:

powershell 复制代码
# 查找被删对象
$del = Get-ADObject -IncludeDeletedObjects -Filter 'samaccountname -eq "bob"'
# 恢复到指定 OU(一次到位)
Restore-ADObject -Identity $del.ObjectGUID -TargetPath "OU=Recovery,DC=corp,DC=local"

AD 回收站(可视化/保留更多链接信息)

林功能级别 ≥ 2008 R2,可启用回收站(一次性操作,不可回退;慎重变更评审):

powershell 复制代码
Enable-ADOptionalFeature "Recycle Bin Feature" `
  -Scope ForestOrConfigurationSet `
  -Target "corp.local"

启用后,恢复会更完整地保留链接属性 (如 memberOf),减少后续"缝合"工作量。


六、典型场景剧本

1)单用户被删

  • AdRestore /filter:"(sAMAccountName=bob)" /restore
  • 四件套补缀 + 验证

2)OU 下批量用户被删

  • AdRestore /filter:"(&(objectClass=user)(lastKnownParent=OU=Sales,DC=corp,DC=local))" /restore /quiet
  • 批量启用、回填组、移动到隔离 OU,再整体移回

3)服务账号被删导致应用认证失败

  • AdRestore /filter:"(sAMAccountName=svc_app)" /restore
  • 重设密码 → 更新应用池/服务凭据 → 重启服务
  • 如使用 Kerberos,核查/回填 SPN:setspn -S HTTP/app01.corp.local CORP\svc_app

4)计算机对象被删,域信任破损

  • 恢复计算机对象 → 在主机上执行:
    Reset-ComputerMachinePassword -Server dc1.corp.local -Credential (Get-Credential)

七、风险与坑位清单

  • 生命周期超期 :超过 msDS-DeletedObjectLifetime,对象会被硬删除 ,AdRestore 也无能为力。准备离线/系统态备份是唯一兜底。
  • 组成员丢失 :未启用回收站或生命周期策略不当,恢复后 memberOf 可能不完整 → 必须有组成员基线以便回填。
  • 移动即触发策略 :直接恢复到原 OU 可能被 GPO/脚本二次改写 → 隔离 OU 是更稳妥的中间站。
  • 权限不足 :即便是域管,也可能对目标容器的恢复被 ACL 限制 → 预先委派/验证权限
  • 跨域/多域控一致性 :多 DC 环境有复制延迟,耐心等复制 或指定 /server:dcX 直连最新写入者。

八、操作留痕与合规

  • 记录:谁、何时、从哪里、恢复了哪些 DN、输出日志/CSV 保存到变更单。
  • 最小权限 :使用受委派的恢复账号;避免用"万能域管"做日常恢复。
  • 变更窗口:批量恢复、关键对象恢复必须走审批,避开业务高峰。
  • 复盘:为何被删?是否误操作?是否需要对 OU/关键组开启"防止意外删除"、加审批与二次确认。

九、口袋速查卡(Cheat Sheet)

text 复制代码
# 快速筛选
AdRestore /filter:"(sAMAccountName=bob)"

# 批量(按最后父容器)
AdRestore /filter:"(lastKnownParent=OU=Sales,DC=corp,DC=local)" /restore /quiet

# 恢复后"缝合"四件套(PowerShell)
Enable-ADAccount <id>
Set-ADAccountPassword <id> -Reset -NewPassword <secure>
Set-ADUser <id> -ChangePasswordAtLogon $true
# 回填 group memberOf(基于基线CSV)

# 启用回收站(一次性)
Enable-ADOptionalFeature "Recycle Bin Feature" -Scope ForestOrConfigurationSet -Target "corp.local"

结语

AdRestore 专注"从墓地拉回",把"有没有"问题变成"先复活再缝合"的确定性操作。

把它与 AdExplorer 快照 (找差异)+ PowerShell (批量补缀)+ 回收站 (信息保留)串成流水线,你的 AD 误删恢复将进入"快、稳、可审计"的新常态。

下一篇,我们做一次 第十章术式合并的"现场实操脚本包",把本章命令与模板打成一套可直接纳入你的工具仓库。

相关推荐
茶猫_2 小时前
C++学习记录-旧题新做-字符串压缩
c语言·c++·学习·算法·leetcode
小黄编程快乐屋2 小时前
Python 期末复习知识点汇总
java·服务器·python
千寻技术帮2 小时前
10400_基于Springboot的职业教育管理系统
java·spring boot·后端·毕设·文档·职业教育
Non importa2 小时前
用滑动窗口代替暴力枚举:算法新手的第二道砍
java·数据结构·c++·学习·算法·leetcode·哈希算法
涛声依旧Cjt2 小时前
Spring AOP实战--优雅的对出参进行脱敏
java·spring·springaop 实战·aop 优雅脱敏·spring 脱敏
灰乌鸦乌卡2 小时前
练手项目0 介绍
java
以孝治家行动2 小时前
学孝道故事 传家国情怀——慈明学校以孝治家阳光家教中心开展线上学习
学习·以孝治家·正能量
laocooon5238578862 小时前
C语言枚举知识详解与示例
java·c语言·数据库
全栈陈序员2 小时前
【Python】基础语法入门(十八)——函数式编程初探:用 `map`、`filter`、`reduce` 和 `lambda` 写出更简洁的代码
开发语言·人工智能·python·学习