一个lingering object是已经被删除,但当域控制器还没有在域的墓碑生命期内对变化进行复制时,又被重新加入的任意活动目录对象。对象可以只在一些域控制器中存在。这就造成了活动目录一个不一致的视图,并经常让管理员感到迷惑。 下面的案例研究演示了如何在一个复杂林中找到并移除延迟对象。
该示例中有一个大的代表世界地域的全局林,其中有1个空的父根域以及3个子域。子域被称为美国、欧洲和亚洲,而父根域是Corp.com。 在这种情况下,当用户账户“Ellie”创建后,会产生一个conflicting (CNF)对象,当Ellie这个账户工作于欧洲域时,同时会存在对象的一个CNF版本。一般而言……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
一个lingering object是已经被删除,但当域控制器还没有在域的墓碑生命期内对变化进行复制时,又被重新加入的任意活动目录对象。对象可以只在一些域控制器中存在。这就造成了活动目录一个不一致的视图,并经常让管理员感到迷惑。
下面的案例研究演示了如何在一个复杂林中找到并移除延迟对象。该示例中有一个大的代表世界地域的全局林,其中有1个空的父根域以及3个子域。子域被称为美国、欧洲和亚洲,而父根域是Corp.com。
在这种情况下,当用户账户“Ellie”创建后,会产生一个conflicting (CNF)对象,当Ellie这个账户工作于欧洲域时,同时会存在对象的一个CNF版本。一般而言,CNF对象会进入“Lost and Found”容器,并可以被删除。但是,在这个例子中不是这样的。
如果发生这种情况,您可以使用Active Directory Users and Computers (ADUC)管理单元里的Find功能去查找对象,但要保证查找区域为Entire Directory。
要设定查找区域,在域上点右键,选择Find,然后在In下拉框中,选择Entire Directory,如图1所示:
图1:查找对象对话框
在这个案例研究中,搜索结果表明(图2)对象在Europe.corp.com域中。
图2:搜索结果
因此,通过搜索我们了解到:
1.Guid为9abcee2e-aff2-459e-b6fd-e4a0ae58f39d
2.对象在Europe.corp.com域中
其它可用于查找对象的方法包括:
•ADFind命令:
adfind -h GCServerName -gcb -f name=*lichfield* -dn
GCServerName是全局目录的名字。
•LDIFDE命令
Ldifde -f user.ldf -d "dc=europe,dc=Corp,dc=com" -r "(&(objectClass=user)(name=*lichfield*))"
在某些情况下,可能可以通过Joeware.net的免费工具Admod来删除对象:
admod -b "<GUID=cnf: 9abcee2e-aff2-459e-b6fd-e4a0ae58f39d>" –del
但是,在这个场景中,不能使用该工具。
在这个案例中,下一步是找到对象所在的域控制器。既然不是在所有的域控制器上都能找到该对象,使用Repadmin /showobjmeta命令去获取知道该对象的域控制器列表。
命令使用下列的GUID:
repadmin /showobjmeta * "<guid =9abcee2e-aff2-459e-b6fd-e4a0ae58f39d>"
*为域控制器列表(这个命令在所有域控制器上执行)
这个命令搜索有特定GUID的对象。如果找到,就转储所有的属性,如果没有找到该对象,域控制器会返回下列错误:
repadmin running command /showobjmeta against server WTEC-DC2.Wtec.adapps.hp.com
DsReplicaGetInfo() failed with status 8333 (0x208d):
Directory object not found.
您可以将输出转储到文件中,然后手动查看文件或者使用findstr去找到上述的部分错误信息。排除掉出错的那些域控制器。
不论采用什么方法,最后您会得到一个拥有该对象的域控制器的列表。
使用Repadmin/RemoveLingeringObjects命令
下一步是Repadmain /RemoveLingeringObjects命令。
该命令的语法是:
Repadmin/removeLingeringObjects <Dest_DC_LIST> <Source DC GUID> <NC> [/ADVISORY_MODE]
其中:
- Dest_DC_List是您刚通过/showobjmeta 命令生成的列表
- Source DC GUID是域中一个域控制器的对象GUID,在该域控制器中有该对象,并在复制过程中进行更新。在这个例子中,我使用PDCe。
- NC是要操作的命名上下文。使用DN
在这个研究例子中使用的命令是:
Repadmin /removelingeringobjects eu-dc1 9abcee2e-aff2-459e-b6fd-e4a0ae58f39d DC=europe,DC=Corp,DC=com >> error.log
在这里有一些“陷阱”。首先,这个命令需要在林中的每一个域里,对每一个域控制器都执行一次。在这个场景中,对DC1,该命令运行了4次。请注意,>>操作符是脚本,用于把这些都添加到一个单一的日志文件中。这可以在之后产生一个不错的日志文件。
Repadmin /removelingeringobjects eu-dc1 9abcee2e-aff2-459e-b6fd-e4a0ae58f39d
DC=europe,DC=Corp,DC=com >> error.log
Repadmin /removelingeringobjects eu-dc1 9abcee2e-aff2-459e-b6fd-e4a0ae58f39d
DC=americas,DC=Corp,DC=com >> error.log
Repadmin /removelingeringobjects eu-dc1 9abcee2e-aff2-459e-b6fd-e4a0ae58f39d
DC=Asia,DC=Corp,DC=com >> error.log
Repadmin /removelingeringobjects eu-dc1 9abcee2e-aff2-459e-b6fd-e4a0ae58f39d
DC=Europe,DC=Corp,DC=com >> error.log
因为我不能确定主域控制器(primary domain controller PDC)是一个很好的来源,所以在欧洲域中,我对每一个域控制器都执行了该文件:
Repadmin /removelingeringobjects eu-dc1 b4951358-e44e-41c7-bf86-f2ff1184c66b
DC=europe,DC=corp,DC=com >> error.log
Repadmin /removelingeringobjects eu-dc1 b4951358-e44e-41c7-bf86-
f2ff1184c66bDC=americas,DC=corp,DC=com >> error.log
Repadmin /removelingeringobjects eu-dc1 b4951358-e44e-41c7-bf86-f2ff1184c66b
DC=Asia,DC=corp,DC=com >> error.log
写脚本用于创建一个批处理文件,并避免大量的键入。
设置严格复制一致性
要查看是否移除了对象,执行Repadmin/showobjmeta命令,然后在ADUC管理单元中执行FIND操作。在这个案例研究中,对象被删除了,但在3天后又重新出现了。
这意味着在脚本执行前,对象已经在复制了。因此,没有找到所有的对象,而且最终,对象复制回来了。由于这个域是从Windows 2000升级而来的,严格复制一致性(strict replication consistency)键值被设为“loose”:
HKEY_LOCAL_MACHINESystemCurrentControlSetServicesNTDSParameters ValueName = Strict Replication Consistency
Data Type = Reg_DWORD
Value Data=0
这会允许延迟对象复制到其它域控制器。将键值设为1(严格),然后重新执行脚本。这样就成功删除了该对象。
通过下述命令,可以轻松修改注册表键值:
Repadmin /regkey DC_LIST <{+|-}key> [value]
key只能为众所周知的“strict”。尽管通常情况下,只需在全局目录中执行这个命令,DCList可以设为*.corp.com以包括域中所有的域控制器。
下面是这个命令及其输出的一个例子。在测试林中,我在命令里指定了林根域,然后在两个子域和父域的域控制器上执行该命令。域控制器包括Windows Server 2003、2008以及2008 R2。
图3
该命令的成功运行可以确保严格复制一致性键值被设为1(严格)。这可以阻止域控制器间的延迟对象复制。如果您想启动宽松行为(在进行一些问题诊断时,需要使用),将该值设为-strict:
图4
当使用-strict时,会从注册表中删除掉原来的严格复制一致性键值。第一个消息显示了当前的设置(设为1)。然后输出显示“strict does not exist”,第二个消息表明它被删除了。在WTEC-DC1上执行+strict会产生下述消息:
图5
最初的键值为“does not exist”,意味着被设为“loose”一致性,并可以复制延迟对象。第二条消息表明键值被设为1或者严格一致性。因此,您可以运行这个命令,并看到这个键值的当前状态。
在最初的例子中,两条消息都显示值为严格:1,这表示键值已经被设为严格了,并且在之后又将其设为1。
使用LDIFDE移除延迟对象
除了Repadmin /RemoveLingeringObjects命令,通过LDIFDE也可能移除延迟对象。这是一个更复杂的方法,因为为了更改属性,需要导入LDIFED输入文件。
LDIFDE命令为:
ldifde -i -f %InputFile% -s >> error.log
-f参数指示了输入(导入)文件的名字。
结果可以输出到一个日志文件。在这个例子中,用>>将结果都添加到一个单独的文件中。输入文件的内容会像这样:
File name: DeleteLO.ldf
--------------------------------- dn:
changetype: modify
replace: RemoveLingeringObject
RemoveLingeringObject: CN=NTDS Settings,CN=EU-DC1,CN=Servers,CN=Paris, CN=Sites,CN=Configuration,dc=europe,dc=corp,dc=com,
-
------------------------------
请记住,在一个LDIFDE导入文件中,在指令的末尾,必须有一个空白,随后的一行有一个连字号。在这个研究例子中使用的批处理文件如下所示:
@ECHO off
SET InputFile=DeleteLO.ldf
ldifde -i -f %LDFFile% -s Eu-DC1.europe.corp.com >> error.log
ldifde -i -f %LDFFile% -s EU-DC2.europe.corp.com >> error.log
当然,在林中,对于每个域控制器都需要有一个条目。在执行上述脚本之后,检查错误日志以确定是否在所有的机器上都执行成功了。
虽然延迟对象的检测和清楚可以让人沮丧——尤其是查找对象本身——通过使用Repadmin工具这些基本技术将帮助您成功的在活动目录中清除延迟对象。
欲了解更多Windows 2000或者基于2003的林中延迟对象的有关信息,请查看下面的微软文章:
作者
相关推荐
-
Azure Active Directory Connect是如何协助管理员工作的?
Azure的AD Connect工具可以协助管理员在本地Active Directory环境中顺利工作,也有助于从Azure云中获取管理资源。
-
Active Directory数据库太杂乱?ADSI Edit来清理
随着Active Directory数据库老化,系统会在局部删除用户账号、安装应用程序失败或者其他管理上的失误后积累乱七八糟的东西,以及出现崩溃现象。本文介绍如何使用ADSI Edit来清理Active Directory数据库。
-
如何执行活动目录备份和恢复?
我需要做活动目录备份,但我不确定该使用哪个方法。哪一种才是比较容易的备份和恢复方法呢?
-
Azure进阶教程
微软从未放松其云战略脚步,作为其云计算平台,Azure今年已增加了众多更新,受人瞩目。本期技术手册将深入介绍Azure更多相关知识,涉及Azure新功能、Azure监控与管理,以及Azure的安全措施等等。