2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power Automateで多層セキュリティグループのメンバーをCSV化する

2
Posted at

ネストされたグループのメンバーをCSV化してSharePointに保存する方法(Power Automate)

Power Automateには「グループ メンバーの一覧を表示」アクションがありますが、このアクションではネストされたグループのメンバーを取得できません。

本記事では、親グループの中に子グループがメンバーとして含まれている場合に、すべてのメンバー(ユーザー)をCSVファイルに出力し、SharePointサイトのフォルダーに保存する方法を紹介します。意外と簡単に実現できます。

非常に実用的な内容ですので、活用したい場面でこの記事を思い出し、検索していただけるとうれしいです。

実はこの方法にたどり着く前に、子フローを使った手法も試しました。そちらでも面白い気づきがあったので、別の記事で紹介します。

用意されているグループ系のアクション

image.png

親グループの中に子グループが含まれる場合でもメンバー一覧を取得するには、Graph APIを使用する必要があります。

「HTTP 要求 (V2) を送信」アクション(グループ用)が利用できるため、プレミアムライセンスは不要でした。さらに、自分が参加していないグループのメンバー一覧も取得できました。

自分が参加していないグループも取得できたのは、管理者権限によるものかもしれません。この点については再度検証予定です。

検証用のグループを作る

image.png

4つのグループを作りました。グループ4だけはメールが有効なセキュリティグループにしてみました。

親グループ1
 ├ アデルさん
 └ 子グループ2
      ├ メーガンさん
      └ 孫グループ3
          ├ アレックスさん
          └ ひ孫グループ4(メール付きセキュリティグループ)
              └グラディーさん

グループIDの調べ方

Azure portal/Entra IDが使えるならそちらから調べればOKです。
image.png

Microsoft365管理センターが使えるなら、グループを開いたURLにあるのがグループIDです。
image.png

どちらも使えない人は、自分が参加しているグループならば以下から調べるとよいかと思います。
https://myaccount.microsoft.com/groups/groups-i-belong-to
image.png

クラウドフローを作る

仕組みはとても簡単です。すべてはHTTP要求のエンドポイントを見つけられたことで実現しています。

GET https://graph.microsoft.com/v1.0/groups/{group-id}/transitiveMembers/microsoft.graph.user

image.png

リファレンスはこちらです!

選択

選択アクションでは取得できた情報のなかで必要な項目(列)だけにそぎ落としています。注意点は入力にはvalueの配列をとってくるところくらいです。
image.png

開始
body('HTTP_要求_V2_を送信する')?['value']
mail
item()?['mail']
displayName
item()?['displayName']

テスト実行してみると、ちゃんと各グループのメンバーが配列として取得できています。
image.png

CSVファイルが文字化けしたら?

出力されたCSVファイルをExcelで開くと文字化けすると思います。その場合には、「ファイルの作成」アクションで、ファイルコンテンツに配置した「CSVテーブルの作成」出力の前に以下を式として配置しましょう。

decodeUriComponent('%EF%BB%BF')

image.png

なんでこれで文字化けが解消するのか?知りたい方はこちらを参照してください。

ファイル名に日付をいれる

その時点のメンバーを記録しておくために、ファイルに日付を入れることはよくあります。
フィル名の前とか後ろに以下の式を追加しましょう。

convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time','yyyyMMdd')

image.png
utcnow()関数は標準時ですが、上のようにすると日本時間の現在日付を取得することができます。

このあたりを詳しく知りたい場合にはこちらの記事をどうぞ。

追記

ちなみに、何万ユーザーも含まれているような大きなネストしたグループの場合、Power Automateが全部取得できるのか不安なところです。
ネストしているグループを孫やひ孫の代まで再帰的に巡回してCSVファイルに書き出すってのを別途試しましたので、そちらも近いうちに記事にしようと思います。
(というか、Graph APIの全取得エンドポイント知らなかったから、強引に取得していたのですが)

こんな人が書いています

こちらの記事はランゲルハンス島のDDさんが紹介しました。ブログでクラウドフローのTIPSのようなものを書いたり、Qiita記事を書いたりしていますのでご贔屓に。

フォローやいいねいただけると嬉しいです。
関西のPowerPlatform系の勉強会にときどき出没しますので、「あのアイコンの顔の人だ!」と、気軽に声をかけていただけると喜びます!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?