グループアドレスをもとにチームのメンバーを一致させる

Microsoft Teamsのチームにユーザーを追加するときグループアドレスを使用すると、操作した時点のグループアドレスに含まれるユーザーが追加されます。しかし、グループアドレスに含まれるユーザーが変更されてもチームのユーザーは更新されません。

この記事ではPower Automateを使ってグループアドレスに含まれるメンバーを自動的にチームに追加する手順を紹介します。追加手順だけ示しますが、簡単な変更でチームから削除すべきメンバを抽出することもできます。

フローの全体像

実際にはスケジュールトリガで実行するのがいいでしょう。

アクションの設定


作成 グループアドレス

グループアドレス(メールアドレス)を指定します。

グループの一覧

Office365グループコネクタ

「行をフィルターする」に mail eq ‘outputs(‘作成 グループアドレス’)’

作成 グループアドレスのID

first(outputs(‘グループの一覧’)?[‘body’]?[‘value’])?[‘id’]

HTTP 要求 V2 を送信する

URIを以下のように設定。グループIDのところに「作成 グループアドレスのID」の出力を入れる。

Graph APIでtransitiveMembersを使用することが重要です。グループアドレスのメンバーは個人ユーザーとは限りません。入れ子でグループアドレスが入っている場合もあります。transitiveMembersを使うことで、最終的な個人ユーザーのみを抽出することができます。

$select=id,displayName,userPrincipalNameでidとdisplayNameとuserPrincipalNameを抽出する指示、$top=999で999件まで一度に取得する指示(指示なしの場合は一度に100件まで)をする。

https://graph.microsoft.com/v1.0/groups/{グループID}/transitiveMembers/microsoft.graph.user?$select=id,displayName,userPrincipalName&$top=999

JSON の解析

Contentに「HTTP 要求 V2 を送信する」の「本文」を設定する。

スキーマを以下のように設定する。

{
    "type": "object",
    "properties": {
        "value": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "displayName": {
                        "type": "string"
                    },
                    "userPrincipalName": {
                        "type": "string"
                    }
                },
                "required": [
                    "id"
                ]
            }
        }
    }
}

選択 グループアドレスメンバーのユーザーID

元に「JSON の解析」のbody value

マップのkey userID,
値を入力します 「JSON の解析」のBody id


作成 チームのID

メンバーを追加したいチームのIDを入力します

グループ メンバーの一覧表示

Office365グループコネクタ

グループIDに outputs(‘作成_グループアドレスのID’)

チームであればプルダウンメニューに候補として表示されるので、わざわざ「作成 チームID」で指定しなくてもOKです。

選択 チームのメンバーのIDのみ

元に「グループ メンバーの一覧表示」のbody/value

マップのkey userID
値を入力しますに 「グループ メンバーの一覧表示」の「ユーザーID」


アレイのフィルター処理

グループアドレスメンバーのユーザーID配列から、チームメンバーのユーザーID配列に含まれない要素を抽出する操作をする。

From: body(‘選択_グループアドレスメンバーのユーザーID’)

Filter Queryは以下の通り。

左辺: contains(body(‘選択_チームのメンバーのIDのみ’), item()?[‘userID’])

判定式: 「異なる」 (is not equal to)

右辺: true ※数式から記入する

チームにメンバーを追加

最後にMicrosoft Teamsコネクタの「チームにメンバーを追加する」アクションで、「アレイのフィルター処理」の結果で得られるユーザーのGUID配列をチームに追加して完了。


アレイのフィルター処理を書き換えれば、フロー実行の時点でチームに含まれるがグループアドレスに含まれないユーザーを抽出することもできます。

Office365グループコネクタの「グループからメンバーを削除」アクションを使えば、Power Automateでチームのメンバを削除するこもできます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください