2016-10-27 10 views

答えて

2

は、再帰的にグループからメンバーを取得するために、我々は唯一のメンバーの種類を検出する必要があります。メンバーがグループの場合、メンバーに再度リクエストすることができます。

私はまたあなたの参照のためのAzure ADグラフのクライアントを使用してデモを書きました:あなたの答えのための

public void testPrintMembersRecursively() 
{ 
    var client = GraphHelper.CreateGraphClient(); 
    var group = (Group)client.Groups.ExecuteAsync().Result.CurrentPage.First(g => g.DisplayName == "group4"); 
    var groupFetcher = client.Groups.GetByObjectId(group.ObjectId); 

    PrintMembersRecursively(groupFetcher, 0); 
} 

public void PrintMembersRecursively(Microsoft.Azure.ActiveDirectory.GraphClient.IGroupFetcher groupFetcher, int level) 
{ 
    var membersResoult = groupFetcher.Members.ExecuteAsync().Result; 
    Print(level, membersResoult); 

    while (membersResoult.MorePagesAvailable) 
    { 
     membersResoult=membersResoult.GetNextPageAsync().Result; 
     Print(level,membersResoult); 
    } 
} 

private void Print(int level, IPagedCollection<IDirectoryObject> membersResoult) 
{ 
    var members = membersResoult.CurrentPage; 

    foreach (var obj in members) 
    { 
     var user = obj as Microsoft.Azure.ActiveDirectory.GraphClient.User; 
     if (user != null) 
      Console.WriteLine(String.Format("{0," + level * 8 + "}", user.DisplayName)); 
     else 
     { 
      var groupMember = obj as Microsoft.Azure.ActiveDirectory.GraphClient.Group; 
      if (groupMember != null) 
      { 
       Console.WriteLine(String.Format("{0," + level * 8 + "}", groupMember.DisplayName)); 
        PrintMembersRecursively(GetGroupById(groupMember.ObjectId), level + 1); 
      } 
     } 
    } 
} 


public static ActiveDirectoryClient CreateGraphClient() 
{ 
    string accessToken = ""; 
    string tenantId = "xxx.onmicrosoft.com"; 
    string graphResourceId = "https://graph.windows.net"; 

    Uri servicePointUri = new Uri(graphResourceId);  
    Uri serviceRoot = new Uri(servicePointUri, tenantId); 

    ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async() => await Task.FromResult(accessToken)); 

    return activeDirectoryClient; 
} 
+0

おかげで、これは気を取られたとしてではなく、あなたが、私はあなたの最後でそれを試してみましたので、残念ながら、私はこれを試すことができませんそれを受け入れられた答えとしてマークします。 –

関連する問題