private static void ModifyBatchGroups(KeyedOguObjectCollection groups, int startIndex, int batchSize, SynchronizeContext context) { //Key是AD Guid,Value是Ogu ID Dictionary <string, string> adToOguMapping = GetADToOguMappingFromGroups(groups, startIndex, batchSize, context); string[] propertiesToGet = { "objectguid", "member" }; IEnumerable <SearchResult> adGroups = SynchronizeHelper.GetSearchResultsByIDs(context.ADHelper, adToOguMapping.Keys, propertiesToGet, batchSize); foreach (SearchResult adGroup in adGroups) { SynchronizeContext.Current.ExtendLockTime(); string guid = AttributeHelper.Hex((byte[])adGroup.Properties["objectguid"][0]); ADGroupMemberCollection adGroupMembers = new ADGroupMemberCollection(adGroup.Properties["member"], new string[] { "objectGUID" }); Dictionary <string, ADObjectWrapper> adMemberDict = adGroupMembers.ToDictionary(o => o.NativeGuid); IGroup oguGroup = (IGroup)groups[adToOguMapping[guid]]; if (IsSameMembers(oguGroup.Members, adMemberDict) == false) { SyncGroupMembers(oguGroup, adGroup, context); } } }
private static void ModifyGroups(KeyedOguObjectCollection groups, SynchronizeContext context) { for (int i = 0; i < groups.Count / SynchronizeHelper.ADQueryBatchSize; i++) { ModifyBatchGroups(groups, (i * SynchronizeHelper.ADQueryBatchSize), SynchronizeHelper.ADQueryBatchSize, context); } ModifyBatchGroups(groups, groups.Count / SynchronizeHelper.ADQueryBatchSize, groups.Count % SynchronizeHelper.ADQueryBatchSize, context); }
private static Dictionary <string, string> GetADToOguMappingFromGroups(KeyedOguObjectCollection groups, int startIndex, int batchSize, SynchronizeContext context) { Dictionary <string, string> result = new Dictionary <string, string>(); for (int i = startIndex; i < startIndex + batchSize; i++) { SynchronizeContext.Current.ExtendLockTime(); IDMapping mapping = context.IDMapper.GetAdObjectMapping(groups[i].ID); result.Add(mapping.ADObjectGuid, mapping.SCObjectID); } return(result); }