AdamSync 会定期崩溃。在故障排除过程中,我们发现当它遇到它认为是空的 DN 时会抛出异常。我使用存储在 ADLDS 配置中的 dirsync cookie 重播了查询。转储返回的值后,我发现以下对象:
CN=SCCM Site Server\0ADEL:0b9efaf1-24cc-46a1-92ff-f6aa74254d3e,CN=Deleted Objects,DC=appd,DC=appstate,DC=edu
description
objectguid 0b9efaf1-24cc-46a1-92ff-f6aa74254d3e
instancetype 4
isrecycled TRUE
据我们所知,该对象已不存在。我们无法使用以下方法找到它:任何我们的工具:用户和计算机、LDP、ADSI 编辑、AD 管理中心、AD Explorer、PowerShell 查询(全部使用已删除/回收的过滤器、扩展和标志)。我们认为它可能已经触及墓碑并自 dirsync 查询中指定的日期以来一直由垃圾收集器处理。如果是这样,属性更改记录是否会继续返回?无限期地?如果它没有已经被垃圾收集器处理了为什么我们找不到它?
由于该值而导致的 AdamSync 崩溃似乎是次要影响或完全不同的问题。
答案1
如果您运行 DirSync LDAP 查询而不指定要返回的任何属性,它将返回已更改的任何对象。如果您启用了 Active Directory 回收站,当对象转换为回收状态时(如原始问题中列出的属性所示),状态更改将导致 DirSync 发送一个条目,其中包含 isRecycled = True 的对象。
在与 MS Premier 工程师合作后,我们发现 AdamSync 在 DirSync 结果返回后对对象进行了第二次请求。如果用于运行 AdamSync 可执行文件的帐户仅配置了“复制目录更改”权限,AdamSync 将无法读取返回的对象,因为没有读取回收对象的权限。这会导致第二次查找的 DN 为 NULL,从而导致 AdamSync 崩溃并出现未处理的异常。
有两种解决方案:禁用 AD 回收站或修改 AdamSync LDAP 查询以排除 isRecycled = TRUE 的对象:
(&(<ldap_filter>)(!(IsRecycled=TRUE))
请注意,“TRUE”必须大写。
MS Premier 表示 AdamSync 处于“原样”状态,未处理的异常不太可能被修补。