Windows AD PowerShell(十一):备份与恢复

2761 字
14 分钟
Windows AD PowerShell(十一):备份与恢复

这是 Windows AD PowerShell 学习记录的第十一节。误删一个用户与域控损坏不是同一类故障:前者优先考虑 AD 回收站,后者才需要评估系统状态备份、DSRM 和更完整的灾难恢复方案。

本篇 powershell 代码块中的控制台输出是格式示例,不是本次在 DC 上执行这些 PowerShell 命令的结果;尤其不要照抄示例版本号、备份盘符或删除对象 GUID。本次另外通过现有 ldap3 连接对 QYNET-CORE01 做了只读查询,实测事实会在对应小节明确标注。备份会占用磁盘并影响 I/O;还原、启用回收站会改变 AD 状态,本篇没有执行这些变更。

十一、备份与恢复#

11.1 先判断要恢复什么#

场景优先考虑要点
用户、组或 OU 被误删AD 回收站已提前启用、对象尚在可恢复期内;无需为单个对象停掉 DC
某台 DC 的 AD 数据损坏,其他 DC 正常评估重建 DC 或非权威还原不能把旧数据直接强推覆盖健康副本
整个域或林的 DC 都不可用按域/林恢复计划使用有效备份还涉及 DNS、SYSVOL、FSMO、复制与隔离网络,不是一条 wbadmin 命令能解决
需要把服务器恢复到不同硬件裸机/整机恢复方案系统状态备份不等于完整磁盘镜像;启动项、驱动和硬件兼容性还要另行处理

⚠️ 先确认是否仍有健康 DC、当前复制状态以及备份类型。 尤其在多 DC 环境里,还原某台 DC 的旧系统状态,与把整个域回滚到旧时间点,后果完全不同。

11.2 查询备份版本与任务状态#

在要恢复的 DC 上,用提升权限的 PowerShell 或命令提示符查看备份版本:

Terminal window
wbadmin get versions
wbadmin 1.0 - Backup command-line tool
Backup time: 9/27/2026 9:00 PM
Backup target: Fixed Disk labeled Backup(E:)
Version identifier: 09/27/2026-21:00
Can recover: System State

上面只是输出格式示例。-version: 使用的是 Version identifier,不是自己拼写的日期。若备份不在当前机器的本地目录中,应明确指定备份位置;共享位置存有多台机器的备份时还要指定原机器名:

Terminal window
wbadmin get versions -backupTarget:\\backup-server\dc-backup -machine:QYNET-CORE01
Version identifier: 09/27/2026-21:00
Backup target: Network Share (\\backup-server\dc-backup)
Can recover: System State

查看目前正在运行的备份或恢复任务:

Terminal window
wbadmin get status
ERROR - No backup or recovery operation is currently running.

这条示例表示当前没有任务在运行,不能据此断言没有历史备份。原大纲将它写作“查备份配置”,这里要纠正:get status 查的是当前任务;get versions 才用来列出备份版本与可恢复类型。即使列出版本,也要核对介质是否实际可读,并定期做隔离环境的恢复演练。

11.3 创建系统状态备份#

先确认目标卷确实是专门的备份盘,且空间足够。下面的 E: 只是例子:

Terminal window
Get-Volume -DriveLetter E | Select-Object DriveLetter,FileSystemLabel,SizeRemaining
DriveLetter FileSystemLabel SizeRemaining
----------- --------------- -------------
E Backup 107374182400

在 DC 上执行一次系统状态备份:

Terminal window
wbadmin start systemstatebackup -backupTarget:E:
Do you want to start the backup operation?
[Y] Yes [N] No Y
The backup operation completed successfully.

执行完成后,再核对备份版本:

Terminal window
wbadmin get versions -backupTarget:E:
Version identifier: 09/28/2026-10:30
Backup target: Fixed Disk labeled Backup(E:)
Can recover: System State

在 DC 上,系统状态备份包含 AD DS 所需的关键组件,例如目录数据库和 SYSVOL;但它不是整机所有磁盘数据的备份。需要应对磁盘或整机故障时,还应规划完整服务器/裸机备份及异地副本。备份目标与源系统同盘、只保留一份,都会使恢复能力大打折扣。

11.4 系统状态还原:在 DSRM 中执行#

⚠️ 恢复 DC 的 AD 系统状态前,应进入 DSRM(目录服务还原模式),并确认 DSRM 密码与可用备份。 这是高风险操作;应先明确恢复目标、健康 DC、复制拓扑及恢复后重启步骤,不要在正常服务中的域控上直接试跑。

在 DSRM 中,根据 get versions 显示的真实版本标识符执行。下面仍是命令示意,不是执行记录:

Terminal window
# 版本号必须取自目标备份的 wbadmin get versions 输出
wbadmin start systemstaterecovery -version:09/27/2026-21:00
Do you want to start the recovery operation?
[Y] Yes [N] No Y
The recovery operation completed successfully.

如果备份文件存于其他位置,恢复时还要给出备份位置和原机器名:

Terminal window
wbadmin start systemstaterecovery `
-version:09/27/2026-21:00 `
-backupTarget:\\backup-server\dc-backup `
-machine:QYNET-CORE01
The recovery operation completed successfully.

这里没有写 -quiet 或自动重启,是为了保留人工确认。还原后按既定恢复方案重启、检查 AD DS/DNS/SYSVOL 与复制。普通系统状态还原不是“把误删对象强制恢复给其他 DC”;在还有健康复制伙伴时,非权威还原之后通常会从伙伴接收较新的目录数据。单个对象误删,应先看回收站。

-authsysvol 表示 SYSVOL 的权威还原,不能因为“想恢复 AD 对象”就顺手加上。DFSR SYSVOL、单台 DC 修复与全林灾难恢复各有不同流程,具体步骤应以恢复方案和对应的 Microsoft 林恢复指南为准。

11.5 AD 回收站:先查是否启用#

AD 回收站用于恢复启用后误删的目录对象。启用前已经删除的对象,不能因为今天开启回收站就重新找回来。其前提包括林和域功能级别至少为 Windows Server 2008 R2,以及足够的 AD 管理权限;执行前还应确认复制健康并评估全林影响。

先查功能级别:

Terminal window
Get-ADForest | Select-Object Name,ForestMode
Get-ADDomain | Select-Object DNSRoot,DomainMode
Name ForestMode
---- ----------
qy.net Windows2016Forest
DNSRoot DomainMode
------- ----------
qy.net Windows2016Domain

再查回收站的 EnabledScopes:

Terminal window
Get-ADOptionalFeature -Filter 'Name -eq "Recycle Bin Feature"' |
Select-Object Name,EnabledScopes
Name EnabledScopes
---- -------------
Recycle Bin Feature {CN=Partitions,CN=Configuration,DC=qy,DC=net, ...}

EnabledScopes 若为空,表示尚未启用;若列出林的配置命名上下文,则已启用。不要只看到“能查到 Recycle Bin Feature”这个功能对象就认定回收站已经开启。

**2026/9/28 实验域只读实测:**通过 ldap3 查询 QYNET-CORE01 上的 Recycle Bin Feature 对象,其 msDS-EnabledFeatureBL 包含 CN=Partitions,CN=Configuration,DC=qy,DC=net,以及 QYNET-CORE01、QYNET-CORE02 的 NTDS Settings。因此 qy.net 的 AD 回收站已启用。上方仍是 PowerShell 的输出格式示意,不是实际在 DC 上运行该命令的记录。

⚠️ 启用不可逆,不能再关闭。 启用操作写入林配置分区,需要复制到各 DC 后才可在全林正常使用;它不是“一键强制全林立即完成复制”。生产环境应在变更窗口操作,并在之后检查复制状态。权限方面,以具备所需权限的管理员账户执行;微软文档的不同操作路径分别提到根域 Enterprise Admins 或目标域 Domain Admins,不要把任一组理解成在所有委派环境里都必然足够。

以下是供尚未启用回收站的其他林参考的命令;qy.net 已启用,勿在实验域重复执行:

Terminal window
Enable-ADOptionalFeature `
-Identity 'Recycle Bin Feature' `
-Scope ForestOrConfigurationSet `
-Target 'qy.net'
WARNING: Enabling 'Recycle Bin Feature' on 'qy.net' is an irreversible action.
Do you want to continue?
[Y] Yes [N] No Y

这段是预期交互示意,不表示已在实验域执行。执行后重新查询 EnabledScopes,并结合复制健康检查配置是否传播。

11.6 查找并恢复误删对象#

先缩小查询范围,不要直接对全部删除对象使用 -Properties *:

Terminal window
Get-ADObject `
-Filter 'isDeleted -eq $true' `
-IncludeDeletedObjects `
-Properties lastKnownParent,isRecycled |
Where-Object { -not $_.isRecycled -and $_.ObjectClass -eq 'user' } |
Select-Object Name,ObjectGUID,lastKnownParent,DistinguishedName |
Format-List
Name : test_restore\0ADEL:...
ObjectGUID : 11111111-2222-3333-4444-555555555555
lastKnownParent : OU=Lab,OU=User,DC=qy,DC=net
DistinguishedName : CN=test_restore\0ADEL:...,CN=Deleted Objects,DC=qy,DC=net

这仍是演示数据。被删除对象的 DN 会变成包含 DEL: 的形式;不要直接拿删除前的 DN 还原。先核对 ObjectGUID、原位置 lastKnownParent 和对象类型,避免同名对象误选。

确认目标后,用删除对象的 GUID 恢复:

Terminal window
Restore-ADObject -Identity '11111111-2222-3333-4444-555555555555' -WhatIf
What if: Performing the operation "Restore" on target "CN=test_restore\0ADEL:...,CN=Deleted Objects,DC=qy,DC=net".

确认无误后执行,并重新查询:

Terminal window
Restore-ADObject -Identity '11111111-2222-3333-4444-555555555555'
# 成功时通常无输出,再验证对象路径与状态
Get-ADUser -Identity 'test_restore' |
Select-Object Name,Enabled,DistinguishedName
Name Enabled DistinguishedName
---- ------- -----------------
test_restore True CN=test_restore,OU=Lab,OU=User,DC=qy,DC=net

若原 OU 也被删除,可能要先恢复父 OU,再恢复子对象;也可以在核对目标位置后使用 Restore-ADObject -TargetPath。不要把大量删除对象直接接到 Restore-ADObject 管道里批量恢复。

💡 组成员关系的易错点: 与没有回收站时使用旧式权威还原不同,启用 AD 回收站后、在可恢复期内恢复对象,删除时保留的链接属性通常会一并恢复;微软文档明确给出恢复用户自动重新获得当时的组成员关系与相应访问权的例子。 但对象恢复后仍应核对组、目标资源当前 ACL、跨域复制以及用户现有登录令牌。删除之后别人改过的 ACL、外部系统配置或用户会话,不会因为恢复对象自动回退到过去。

11.7 保留期与“墓碑”#

目录服务配置对象上有两个重要属性:

Terminal window
$forest = Get-ADForest
$configDN = (Get-ADRootDSE).configurationNamingContext
$directoryServiceDN = "CN=Directory Service,CN=Windows NT,CN=Services,$configDN"
Get-ADObject -Identity $directoryServiceDN `
-Properties 'msDS-DeletedObjectLifetime',tombstoneLifetime |
Select-Object 'msDS-DeletedObjectLifetime',tombstoneLifetime
msDS-DeletedObjectLifetime tombstoneLifetime
------------------------ -----------------
180

上方代码块是符合 LDAP 查询值的 PowerShell 输出格式示意,并非这条 PowerShell 命令的实机输出。2026/9/28 实验域 LDAP 实测:tombstoneLifetime = 180,msDS-DeletedObjectLifetime 未设置;后者按前者计算,因此当前有效的可完整恢复期为 180 天。msDS-DeletedObjectLifetime 决定启用回收站时对象处于可完整恢复状态的时间。很多较新的林默认是 180 天,但旧林或曾修改过配置的林可能不同。可恢复期结束后,对象可能转入已回收状态并继续保留一段时间供复制清理,仍能查到残留记录不等于还能完整恢复。超出回收站可恢复期后,应评估可用备份及恢复方案。

11.8 本节记忆卡#

  1. wbadmin get versions 查备份版本;wbadmin get status 只查当前任务。
  2. systemstatebackup 备份系统状态,不是裸机/整机备份;恢复 DC 的系统状态须规划 DSRM、密码及复制后续。
  3. 误删单个 AD 对象先看回收站;它必须提前启用,且启用后不可关闭。
  4. 查回收站是否已开,要看 EnabledScopes;恢复前核对 GUID、原位置、父 OU 与可恢复期。
  5. 回收站恢复用户通常能恢复删除时的组链接,但实际授权仍取决于当前 ACL、复制和登录令牌。

参考资料#


上一篇:Windows AD PowerShell(十):事件日志

下一篇:Windows AD PowerShell(十二):磁盘与性能

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Windows AD PowerShell(十一):备份与恢复
https://springtsuki.xucjno.com/posts/springtsuki/notes/windowsad/powershell/928-backup/
作者
SpringTsuki
发布于
2026-09-28
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
SpringTsuki
你好,我是浅月。
公告
浅月的开发小窝!欢迎你来到这里!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
56
分类
9
标签
42
总字数
188,888
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录