Restore a Deleted Active Directory Object At a Domain Controller running Windows Server 2003
 
  时间到了现在的2010年,如果你的企业还在使用Windows Server 2003系统做为基础平台,套用一句广告词语,那确实是有些"Out"了.(画外音响起:"老兄,你知足吧,我们这儿还Windows 2000 with SP4呢",那我需要善意地提醒你,到7月份微软可就不再对2000提供技术支持啦).不过"Out"归"Out",域控制器上还要坚挺地run着Server 2003,我们的维护工作也还要和Server 2003一样坚挺着.
 
  话说资讯部门有几个长期坐在监控室里查看各台服务器状况的MM,同时也身兼着删除离职人员的域帐号及lotus notes邮件帐号的工作(很辛苦的,7X24小时轮流值班的).每天对着电脑屏幕久了,自然眼睛有些发花,这不,手一抖,就把一个离职员工的工号输错了,再一个确定,这位还在职同事的域账号就被"错杀"了.第二天一大早,叮叮零零的电话就找到资讯部工程师老冯(也就是本人^_^)头上了.
 
..."喂喂喂,是资讯部吗?我是财务部的XXX,我早上来了开了机输入帐号密码登录不进去啦?!我昨天用都还是好好的呢!"
..."那你机器上有弹出什么提示信息吗?"
..."说是系统无法让您登录,请确定您的用户名及域无误...balabalabala"
..."你密码有正确输入吗?前两天系统有提示你密码快到期吗?"老冯见过太多记不清密码或者密码过期导致的这个报错的情况了,所以下意识地这样问问.(域是正常的,因为部门的同事们都可以登录).
..."输入对了啊,我都敲了N遍了!"
......老冯心想,就算是你不想承认密码记不清楚了输错这么多遍想必帐号也被锁定了,先到域控上看一下吧.
 
  于是乎,老冯使用Dameware连接到域控制器上(一个单域两个域控,都run的是Windows Server 2003 with SP2,老冯也"out"着...T_T),打开"Active Directory用户和计算机"控制台,调出"查找用户,联系人及组"的搜索框,输入了来电员工的工号f6825091然后开始查找,结果返回的是"搜索不到相符的项目".
..."昨天还能用今天就用不了了..杯具了,难不成被人删掉了?"(域管理员可不止老冯一个.)
  联想到此,老冯不慌不忙地在域控上的"开始"--->"运行"里叫出好帮手"ldp.exe".
 
  这个"ldp.exe"工具是做什么用的呢?
  老冯这里可要站出来为这位好朋友好好宣传一下了.
  在我们把安装有Windows Server 2003 Standard/Enterprise系统(及其以上)的服务器提升为域控制器后,都会内置这个ldp.exe工具.它可以用于对任何像是Active Directory这样的LDAP目录进行连接、绑定、搜索、修改、添加和删除,而老冯最常用的就是拿它来查看存储在Active Directory中的对象等数据.
 
  在老冯叫出了ldp.exe的主程序窗口后,它需要先确认召唤它的主人的身份.点击Connection(连接),然后在下拉菜单中点击Bind(绑定),
clip_image002
  然后输入老冯自己的具有域管理员身份的帐号和密码还有要登录的域名,点击"OK".
clip_image004
  可以看到通过身份验证的提示和一大串别的信息.
clip_image006
  接着,下一步,老冯就要去找这(Active Directory)里面的一个叫做"Deleted Objects"的容器.
  这是什么东东?又是干啥用的?
  呵呵,各位看官莫急,且听老冯慢慢道来.
 
  其实,当我们在Active Directory中删除了一个对象时,它并没有立即就从活动目录数据库中被"人间蒸发"掉,而是会被打上一个"已删除"的标记并被挪到这个叫做"Deleted Objects"的隐藏容器中,这个过程也就是我们常说的逻辑删除.而这个墓碑对象真正被系统删除(物理删除)的时间在Windows Server 2003打上了SP2补丁以后默认为180天(这个时间也是可以由adsiedit.msc工具进行修改的).也就是说虽然我们于某时删除了这个活动目录对象后无法再使用或者说看见它,但它实际上还安安稳稳地躲在"Deleted Objects"容器中直至被删除时刻的180天后.那么我们的思路就很明确了,对于还在180天墓碑生存时间里的被删除对象,只要找到"Deleted Objects"容器,定位到被删除对象本身再设法去掉它的"已删除"标记然后抛回它原来的所在地(原来的OU)中就OK了.
 
  So,请接着和老冯一起往下拯救大兵XXX.
  上面已经提到了"Deleted Objects"是"隐藏Boss",所以需要多花点力气(步骤)才能find it.
  老冯继续操作ldp.exe, 在"Options"菜单中,单击“Controls”,展开"Load"下拉菜单,单击"Return deleted objects",然后"确定".
clip_image008
  又回到主画面,点击"View"--->"Tree",在BaseDN中输入DC=CONTOSO,DC=COM,点击"OK".
clip_image010
  在控制台树中双击根DN,终于可以看到CN=Deleted Objects,DC=contoso,DC=com容器了.
  而且令老冯眼前一亮的是,打电话的这个MM的域帐号果然也在此容器内.
clip_image012
  抓紧时间,用户等的有点不耐烦了.
  OK,接着在这个被删除对象上右键,选择"Modify".
clip_image014
  然后在弹出的对话框中依次执行:
1.在“Edit Entry Attributes”中输入 isDeleted
2.保留“Values”框为空值
3.在“Operation”下单击“Delete”,然后单击“Enter”
4.在“Edit Entry Attributes”中,输入 distinguishedName
5.在“Values”中,键入此 Active Directory 对象的原始DN(可分辨名称):CN=f6825091,OU=Finance,DC=contoso,DC=com
6.在“Operation”下单击“Replace”
7.选中“Extended”复选框,单击“Enter”,然后单击“Run”
clip_image016
  如果一切顺利,不会返回任何error信息.
  回到"Active Directory用户和计算机"控制台上点击进用户原来的OU,可以看到用户账号已经被还原回来了.
image
  但是,你会发现,除了被还原回来的账号处于禁用状态,其属性中还丢失了很多信息,例如,姓名,所属组等.这是设计使然.当活动目录对象被删除时,除了objectGUID属性等被保留,其他属性都会被剔除.如果我们想要修改墓碑对象中哪个属性会被保留,需要使用ADSIEDIT.MSC工具打开活动目录架构, 找到想要保留的每个属性(例如Address),设置对应的searchFlags属性值为 0x00000008。然而链接属性,就像组成员关系,即使设置也不能保留。所以被还原回来的用户帐号还需要手动再加一遍组成员关系等.
clip_image002[5]
  对于用户组,其恢复过程与用户相似,这里就不赘述了.
 
====================================================
  话说在老冯成功地使用ldp.exe工具轻松地还原了单个被删除的Active Directory对象后,给做在监控室里的小妹们发了封邮件友善地提示她们以后删除帐号要先看清楚再动手,小妹们谨记教诲,自此相安无事.
  又过了几日,坐在老冯旁边的新进工程师小周悄悄地凑过来问,"冯哥,我刚才一不小心在一个OU里删除了一票用户帐号".
  正在喝茶的老冯听罢差点没一口水喷在电脑屏幕上.
..."额,怎么这么不小心啊?"
..."不好意思啊哥,最近偷菜把手指功夫练的太灵活了,不小心就多点了那么几下..."
(^%/$%^*@%#!!@%~)
  老冯忙不迭地登到域控上一看,Oh my lady gaga plus Orz.市场部OU下原来大概有二,三十号人,现在就剩俩了.这要还用上回的还原方法(LDP.EXE)可就不灵了,不等你恢复好他们部门老大怕都早已一个电话打到自己老板那去啦.
  赶紧请出AdRestore.exe吧~(下载地址: http://live.sysinternals.com,下载成功后请将此程序拷贝入%windir%system32目录下)
  adrestore.exe使用起来很简单,命令提示符中键入adrestore回车,就可以看到被删除的活动目录对象信息,
clip_image002[7]
clip_image004[4]
然后使用adrestore -r 后面加想要被还原的对象的cn,回车
clip_image006[5]
会提示是否要还原选定对象,键入Y,再回车,
clip_image008[5]
被删除的用户也顺利恢复了.比起使用ldp.exe可真是大大节省了时间.
不过和ldp.exe一样,存在帐户属性信息丢失和所属组丢失的情况.
"好在这个OU里的帐户属性并不复杂,所属组也就一个,剩下的重复性工作就交给小周来完成吧,当给他一个教训也是一次锻炼机会吧~",老冯心中暗想...
 
                                                                                                            ...To  be continued
====================================================
Notes:本文部分参考<Windows Server 2008 Active Directory ResourceKit>一书