private static bool IsChildrenModified(IOguObject oguObject, ADObjectWrapper targetObject) { ADHelper adHelper = SynchronizeContext.Current.ADHelper; SearchResult result = SynchronizeHelper.GetSearchResultByDN(adHelper, targetObject.DN, ADSchemaType.Groups); //当前肯定有改组存在 ResultPropertyValueCollection adMembers = result.Properties["member"]; IUser[] oguUsers = ((IGroup)oguObject).Members.Where(u => u.FullPath.StartsWith(SynchronizeContext.Current.StartPath) && u.IsSideline == false).ToArray(); if (adMembers.Count != oguUsers.Count()) { return(true); } foreach (var memberDN in adMembers) { bool exists = false; for (int i = oguUsers.Length - 1; i >= 0; i--) { if (SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(oguUsers[i])) == memberDN.ToString()) { exists = true; break; } } if (exists == false) { return(true); } } return(false); }
protected override bool ComparePropertyValue(IOguObject srcOguObject, string srcPropertyName, ADObjectWrapper adObject, string targetPropertyName, string context) { string targetPropertyValue = null; if (adObject.Properties[targetPropertyName] != null) { targetPropertyValue = adObject.Properties[targetPropertyName].ToString(); } return(SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(srcOguObject)) == targetPropertyValue); }
private static ADObjectWrapper FindOUObject(IOguObject oguObject) { ADObjectWrapper adObject = null; string objectGuid; if (SynchronizeContext.Current.IDMapper.SCIDMappingDictionary.ContainsKey(oguObject.ID)) { var idMapping = SynchronizeContext.Current.IDMapper.SCIDMappingDictionary[oguObject.ID]; objectGuid = idMapping.ADObjectGuid; adObject = SynchronizeHelper.GetSearchResultByID(SynchronizeContext.Current.ADHelper, objectGuid, ADSchemaType.Organizations).ToADOjectWrapper(); if (adObject == null) { //这里要删除ID映射 if (!SynchronizeContext.Current.IDMapper.DeleteIDMappingDictionary.ContainsKey(oguObject.ID)) { SynchronizeContext.Current.IDMapper.DeleteIDMappingDictionary.Add(idMapping); } SynchronizeContext.Current.IDMapper.SCIDMappingDictionary.Remove(c => c.SCObjectID == oguObject.ID); } } if (adObject == null) //通过ID没找到 { string dn = SynchronizeHelper.GetOguObjectDN(oguObject); if (dn != "") { adObject = SynchronizeHelper.GetSearchResultByDN(SynchronizeContext.Current.ADHelper, dn, ADSchemaType.Organizations).ToADOjectWrapper(); if (adObject != null) { //这里首先要判断是否已被映射过 if (SynchronizeContext.Current.IDMapper.ADIDMappingDictionary.ContainsKey(adObject.NativeGuid)) { adObject = null; } } } else { //using (DirectoryEntry root = SynchronizeContext.Current.ADHelper.GetRootEntry()) //{ // adObject = new ADObjectWrapper() { ObjectType = ADSchemaType.Organizations }; // adObject.Properties["distinguishedName"] = root.Properties["distinguishedName"][0].ToString(); // adObject.Properties["objectGUID"] = root.NativeGuid; // adObject.Properties["name"] = root.Name; //} } } return(adObject); }
public static IOguObject Find(ADObjectWrapper childADObject, IEnumerable <IOguObject> oguObjects) { IOguObject result = null; //这里仅仅是查找所给集合里是不是存在相应的对象 foreach (var obj in oguObjects) { if (obj.ObjectType == SchemaType.Users) { if (((IUser)obj).IsSideline) { // continue; } } var guid = childADObject.NativeGuid; if (SynchronizeContext.Current.IDMapper.ADIDMappingDictionary.ContainsKey(guid)) //有映射 { if (obj.ID == SynchronizeContext.Current.IDMapper.ADIDMappingDictionary[guid].SCObjectID) { result = obj; } } else { switch (childADObject.ObjectType) { case ADSchemaType.Organizations: if (SynchronizeHelper.AppendNamingContext(childADObject.DN) == SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(obj))) { result = obj; } break; case ADSchemaType.Groups: case ADSchemaType.Users: if (childADObject.Properties["samAccountName"].ToString() == obj.Properties["LOGON_NAME"].ToString()) { result = obj; } break; } } } return(result); }
/// <summary> /// 判断AD对象的DN和ogu对象的Path是否相同,此处需要考虑转义的测试 /// </summary> /// <param stringValue="oguObject"></param> /// <param stringValue="adObject"></param> /// <returns></returns> public static bool ArePathEqaul(IOguObject oguObject, ADObjectWrapper adObject) { var localPathToDN = SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(oguObject)); return(localPathToDN == adObject.DN); }