2017-05-22 16 views
0

Microsoft Graph API(nugetで利用可能なdotnet/C#ライブラリ)を使用して、Azure ADグループからユーザーを追加(後で削除)する方法を調査しました。他のすべて無視MS Graph API C#グループにユーザーを追加する

Nuget MS Graph API

周りを取得接続GraphServiceClientなど、私は以下のサンプルに非常によく似たコードをしようとしている、(示唆物事がうまくある)任意の例外を取得ではなく、私はもう一度経由でグループを取得するときAPIはまだメンバーがいません!

Quickwatch of returned group object after modification attempt

興味深いことに(脇など)私はuserオブジェクトにmemberOfプロパティをお願いし、それを展開することを教えたときに、それはまだ戻ってヌルが来ます。

var user = await client.Users[userPrincipalName] 
      .Request() 
       .Select("id,memberOf") 
       .Expand("memberOf") 
        .GetAsync(); 

var group = await client.Groups[groupId] 
       .Request() 
       .Select("members") 
        .Expand("members") 
        .GetAsync(); 

group.Members.Add(user); 

await client.Groups[groupId].Request().UpdateAsync(group); 

// userPrincipalName => "[email protected]" 
// groupId => the object GUID for the group 

私がここで間違っていることを知っている人はいますか?私は設定ライセンスにここで提案ソリューションにアプローチのスタイルを設定しようとした、また

API doc for 'group'

Adding a member to a group

:私はこのコードを思い付くために使用されるドキュメントは、次のドキュメントへのリンクに基づいていましたユーザーのための:いつものように

Assign user license via Graph API

、任意の助けに感謝します。

ピーター

追加私はまた、潜在的にグループ自体ではなく、.Membersプロパティ/リソースの更新を見て、グラフAPIにチャンスをうかがってみた

await client.Groups[groupId].Members.Request(). // <-- Only has GetAsync() 

しかし、それにはGetAync()メソッドしかありません。答え

var usersGroups = await client.Users[userPrincipalName].MemberOf.Request().GetAsync(); 

if (!usersGroups.Any(g => g is Group && g.Id == groupId)) 
{ 
    // User is not a member of the group, add them. 
    var user = await client.Users[userPrincipalName].Request().Select("id").GetAsync(); 
    await client.Groups[groupId].Members.References.Request().AddAsync(user); 
} 

に基づいて更新

私はそれが簡潔にメンバーを追加することに関する問題に答えると思うように私は、回答に基づいて上記のコードスニペットを追加しました。

答えのNan Yuに感謝します。

答えて

2

グループにユーザーを追加するには、使用することができます:

User userToAdd = await graphClient.Users["objectID"].Request().GetAsync(); 
await graphClient.Groups["groupObjectID"].Members.References.Request().AddAsync(userToAdd); 

をグループのメンバーを取得するには:

 List<ResultsItem> items = new List<ResultsItem>(); 

     // Get group members. 
     IGroupMembersCollectionWithReferencesPage members = await graphClient.Groups[id].Members.Request().GetAsync(); 

     if (members?.Count > 0) 
     { 
      foreach (User user in members) 
      { 
       // Get member properties. 
       items.Add(new ResultsItem 
       { 
        Properties = new Dictionary<string, object> 
        { 
         { Resource.Prop_Upn, user.UserPrincipalName }, 
         { Resource.Prop_Id, user.Id } 
        } 
       }); 
      } 
     } 

は、現在のユーザーは、あなたが試みることができる、の直接のメンバーであるグループを取得します。

IUserMemberOfCollectionWithReferencesPage memberOfGroups = await graphClient.Users["[email protected]"].MemberOf.Request().GetAsync(); 

      if (memberOfGroups?.Count > 0) 
      { 
       foreach (var directoryObject in memberOfGroups) 
       { 

        // We only want groups, so ignore DirectoryRole objects. 
        if (directoryObject is Group) 
        { 
         Group group = directoryObject as Group; 
         items.Add(new ResultsItem 
         { 
          Display = group.DisplayName, 
          Id = group.Id 
         }); 
        } 

       } 
      } 
+0

私は以前この "GroupService"を見たことがありませんでしたが、他のものは理にかなっているようです。 :) – peteski

+0

申し訳ありませんが、私はhttps://github.com/microsoftgraph/aspnet-snippets-sampleを使用していると思います。そのコードサンプルには、GroupServiceクラスがあります。そのコードサンプルを使用していない場合IGroupMembersCollectionWithReferencesPage members = await graphClient.Groups [id] .Members.Request()。GetAsync();を使用することができます。グループメンバーを得る。編集した回答を確認してください。 –

+0

申し訳ありませんが、コードサンプルはhttps://github.com/microsoftgraph/aspnet-snippets-sampleです。 –

関連する問題