利用者を台帳管理したいようなニーズにいかが?
Microsoft365ではグループを使って色々なものを管理しています。時にはそういうグループの一覧をExcelなどのファイルに出力して管理したいということもあるでしょう。ある業務システムを利用できるユーザーを、メールが有効なセキュリティグループをつかってコントロールしていて、グループへのメンバー追加はユーザーにまかせているけれども、利用者台帳を別に表として管理しておきたいというようなニーズはありそうです。今回は、PowerAutomateを使って試してみます。
グループのIDを用意する
いちばん馴染みが深いのは、Teamsでチームを作った時に自動的に作成されるMicrosoft365チームでしょう。それ以外にも配布リスト、セキュリティグループなどがあります。
PowerAutomateではメンバーを取得したいグループの「グループID」を利用します。一番簡単なのはMicrosoft365管理センターから利用したいグループの画面を開いた時に、その画面のURLの中に表示されています。セキュリティグループの場合は「GroupDetails/」とう表示の後ろにある部分です。Microsoft365グループの場合は「TeamDetails/」に表示されているグループIDをあらかじめ取得しておきます。
Excelで2つのテーブルを用意する
取得したいグループのIDを記載した「取得グループ」テーブルと、結果を出力する「メンバー一覧」テーブルを用意しました。
グループIDをアクションに渡す
Excelに用意した「取得グループ」を「表内に存在する行を一覧表示」アクションを使って取得し、ループを使ってひとつずつ「グループ メンバーの一覧を表示」アクションに渡します。
Apply to eachのなかで取得しているので、その中身から「取得グループID」だけを取り出すには、このように式を入力します。
item()?['取得グループID']
いちどテスト実行してみると、グループに参加しているメンバーの名前やメールなどの情報が取得できたことがわかります。
あとはExcelのテーブルに書き出してやるだけです。
実行してみると、メンバーなどの情報が一覧に書き出されました。あらかじめ複数のグループの情報を一度に取得できるようにしてあるので、右側の取得グループIDを増やせば、自動的に左に出力されるリストも増えいきます。
実行するたびにユーザーが増えていく(涙)
成功によろこび、嬉しくなって再実行してみるとすぐに気がつきます。実行するたびに同じユーザーが増えていくと・・・。
これではグループの中身を表す一覧としては使えないので、テーブルに追加する際に、同じユーザーがいなければ追加。いれば追加しないという処理が必要そうです。
まず、ひとつめのループに、メンバーリストを取得する「表内に存在する行を一覧表示」アクションを追加しました。フィルタークエリにこのループの1回ごとに、メンバーリストの中から1グループずつにフィルタをかけて取り出します。こうすることで、複数のグループに同じメンバーが存在した場合にも判定がしやすくなります。
こんどは、取得したメンバーを「選択」アクションをつかって配列にしてやります。「選択」はマップモードに切り替えてから、図のように指定して使います。
ユーザーリストを以下のように整えてからテスト実行してみます。
あらかじめフィルタリングされたユーザーの一覧が、配列になっていることがわかります。これで、存在するかどうかの判定がしやすくなります。
ここまでできれば、あとはメンバーリストに行追加する際に、そのリストにすでに追加しようとしているメンバーが含まれているかどうかを判定できます。「条件」をつかって、含まれていない場合にだけ行を追加しました。