private void ProcessOrganization(IOrganization organization, ADObjectWrapper adObject) { SynchronizeContext.Current.ExtendLockTime(); IList <IOrganization> allOrganizationChildren = GetObjectDetailInfo <IOrganization>(organization.Children); SynchronizeContext.Current.ExtendLockTime(); IList <IUser> allUserChildren = GetUserDetailInfo(organization.Children); SynchronizeContext.Current.ExtendLockTime(); IList <IGroup> allGroupChildren = GetObjectDetailInfo <IGroup>(organization.Children); //如果AD中有对应的组织 if (adObject != null) { //在AD中找对应的子对象 List <ADObjectWrapper> allADChildren = SynchronizeHelper.SearchChildren(adObject); Trace.WriteLine("检查AD中的子项,共" + allADChildren.Count + "项"); foreach (ADObjectWrapper child in allADChildren) { SynchronizeContext.Current.ExtendLockTime(); if (child.Properties.Contains("displayNamePrintable")) { //肯定是群组了 if (SynchronizeHelper.PermissionCenterInvolved.Equals(child.Properties["displayNamePrintable"])) { IOguObject subObj = OguObjectFinder.Find(child, organization.Children); if (subObj == null) { //在权限中心的组织下没有找到则删除项 SynchronizeContext.Current.PrepareAndAddDeletedItem(subObj, child, ObjectModifyType.Delete); Trace.WriteLineIf(subObj == null, "无对应AD对象 " + child.DN + "的OGU对象,加入删除列表"); } } } else { IOguObject subObj = OguObjectFinder.Find(child, organization.Children); if (subObj == null) { //在权限中心的组织下没有找到则删除项 SynchronizeContext.Current.PrepareAndAddDeletedItem(subObj, child, ObjectModifyType.Delete); Trace.WriteLineIf(subObj == null, "无对应AD对象 " + child.DN + "的OGU对象,加入删除列表"); } } } } allUserChildren.ForEach(child => RecursiveProcess(child)); allGroupChildren.ForEach(child => RecursiveProcess(child)); allOrganizationChildren.ForEach(child => RecursiveProcess(child)); }