Beispiel #1
0
        /// <summary>
        /// Get distribution list details and members count from AAD.
        /// </summary>
        /// <param name="groupIds">List of distribution list ids.</param>
        /// <returns>Count of members in distribution list.</returns>
        public async Task <List <DistributionList> > GetADGroupMemberCountBatchAsync(
            List <string> groupIds)
        {
            IEnumerable <List <string> > groupBatches = groupIds.SplitList(5);
            List <DistributionList>      dlGraphData  = new List <DistributionList>();

            string[] queries = new string[2] {
                "/groups/{0}/members?$select=displayName,mail,userType&$top=999", "/groups/{0}?$select=id,displayName,mail,mailNickname,mailEnabled"
            };

            foreach (List <string> groupBatch in groupBatches)
            {
                string[] scopes     = { "Group.Read.All" };
                string   graphQuery = $"https://graph.microsoft.com/v1.0/$batch";
                List <MSGraphBatchRequest> allRequests = MSGraphBatchRequestCreator.CreateBatchRequestPayloadForGroups(queries, "GET", groupBatch);
                MSGraphBatchRequestPayload payload     = new MSGraphBatchRequestPayload()
                {
                    Requests = allRequests,
                };

                List <MSGraphBatchResponse <dynamic> > responses = await this.protectedApiCallHelper.CallGraphApiPostOnBehalfOfUser(scopes, graphQuery, JsonConvert.SerializeObject(payload));

                if (responses != null)
                {
                    foreach (string group in groupBatch)
                    {
                        try
                        {
                            List <DistributionListMember> dlMember = this.protectedApiCallHelper.GetValue <List <DistributionListMember> >(JsonConvert.SerializeObject(responses.Find(s => s.Id == group).Body), "value");
                            DistributionList dlDetails             = this.protectedApiCallHelper.GetValue <DistributionList>(JsonConvert.SerializeObject(responses.Find(s => s.Id == group + '1')), "body");
                            if (dlDetails != null && dlMember != null)
                            {
                                dlDetails.NoOfMembers = dlMember.Where(x => (string.Equals(x.Type, "#microsoft.graph.group", StringComparison.OrdinalIgnoreCase) ||
                                                                             string.Equals(x.UserType, "member", StringComparison.OrdinalIgnoreCase))).Count();

                                dlGraphData.Add(dlDetails);
                            }
                        }
                        catch (Exception ex)
                        {
                            this.telemetryClient.TrackTrace($"An error occurred in GetADGroupMemberCountBatchAsync:  {group}", SeverityLevel.Error);
                            this.telemetryClient.TrackException(ex);
                        }
                    }
                }
            }

            return(dlGraphData);
        }