ささみ学習帳 - sasami's study book

ささみ学習帳

Microsoft365 や Power Platform について学んだこと・アイデアのメモ

Power Automate クラウドフローでテナントIdを取得する方法を比較してみた

 

はじめに

クラウドフローでテナントIdを取得する方法を調べたところ5つの方法が見つかったので比べてみました。

 

 

1.Graph API の/organization エンドポイントから💎

もっとも正攻法(?)かもしれない、Graph API で /organization エンドポイントを利用する方法です。

learn.microsoft.com

 

アクション2つで取得できシンプルですが、プレミアムコネクタであるMicrosoft Entra ID (preauthorized)コネクタのHTTP要求を呼び出しますアクションを使用するため、プレミアムコネクタが利用できるライセンスが必要となります。

 

 

アクション解説

1-1.[Microsoft Entra ID (preauthorized)] HTTP要求を呼び出します-oraganization

 

このように、idとしてテナントIdが返されますのでこれを取得します。

1-2.[Data Control] 作成-tenantId3

  • 入力
    • first(body('HTTP_要求を呼び出します-organization')?['value'])?['id']

 

 


 

2.Power Automate Managementコネクタで環境の情報から

Power Automate Management コネクタを利用すること環境の情報からテナントIDを取得します。

 

 

アクション解説

2-1.[Power Automate Management] 自分の環境の一覧表示

このアクションで利用可能な環境の一覧が取得できます。

出力のJSONはアレイになっていますが、既定の環境の情報を利用します。

既定の環境の"name"の"Default-"に続く部分がテナントIdに対応しています。

 

2-2.[Data Control] アレイのフィルター処理-既定の環境

環境の一覧から既定の環境を抽出します。

  • From
    • @{outputs('自分の環境の一覧表示')?['body/value']}
  • Filter Query
    • @{item()?['name']}
    • start with
    • Default-

 

2-3.[Data Control] 作成-tenantId

  • 入力
    • replace(
      first(body('アレイのフィルター処理-既定の環境'))?['name'],
      'Default-',
      ''
      )

 

 


 

3. Power Apps for Makers コネクタで環境の情報から

Power Apps for Makers コネクタを利用することで環境の情報からテナントIDを取得します。利用するコネクタ・アクションが異なるだけで2とほぼ同じです。



アクション解説

3-1.[Power Apps for Makers] 環境を取得する

※パラメータはデフォルトのままです

このアクションで利用可能な環境の一覧が取得できます。

出力のJSONはアレイになっていますが、既定の環境の情報を利用します。

既定の環境の"name"の"Default-"に続く部分がテナントIdに対応しています。

 

3-2.[Data Control] アレイのフィルター処理-既定の環境2

環境の一覧から既定の環境を抽出します。

 

  • From
    • @{outputs('既定の環境を取得する')?['body/value']}
  • Filter Query
    • @{item()?['name']}
    • start with
    • Default-

 

3-3.[Data Control] 作成-tenantId

  • 入力
    • replace(
      first(body('アレイのフィルター処理-既定の環境'))?['name'],
      'Default-',
      ''
      )

 

 


 

4.SharePoint Rest API から

SharePoint REST API を使ってSharePointのユーザープロパティからテナントIdを取得する方法です。


アクション解説

4-1.[SharePoint] SharePoint に HTTP 要求を送信します-GetMyProperties

  • サイトのアドレス
    • サイトを指定
  • 方法
    • GET
  • URI
    • _api/SP.UserProfiles.PeopleManager/GetMyProperties

 

出力されたユーザープロパティに含まれる"SPS-DistinguishedName"にテナントIdが含まれています。

 

4-2.[Data Control] アレイのフィルター処理-SPS-DistinguishedName

SPS-DistinguishedNameを抽出します。

 

  • From
    • @{body('SharePoint_に_HTTP_要求を送信します-GetMyProperties')?['d/UserProfileProperties/results']}
  • Filter Query
    • @{item()?['Key']}
    • is equal to
    • SPS-DistinguishedName

 

4-3[Data Control] 作成-tenantId2

  • 入力
    • split(
          split(
              body('アレイのフィルター処理-SPS-DistinguishedName')[0]?['value'], 
              'OU='
          )[1], 
          ','
      )[0]

 

 

 


 

5. Microsoft Teams コネクタから

Microsoft Teams コネクタのチームの一覧表示アクションの出力からテナントIDを取得する方法です。この方法では、全くチームに所属していないアカウントでは取得できない点に注意が必要です。

 

アクション解説

5-1.[Microsoft Teams] チームの一覧表示

チームの一覧表示アクションの出力にはテナントIdが含まれていますのでこれを取得します。

 

5-2.[Data Control] 作成-tenantid5

  • 入力
    • @{body('チームの一覧表示')?['value'][0]?['tenantId']}

 


 

まとめ

特徴をまとめるとこんな感じです。

方法 特徴
1.Graph API の/organization エンドポイントから💎 正攻法っぽい
シンプル
プレミアムコネクタが使えるライセンスが必要
Graph APIを使うのでハードルちょっと高め
2.Power Automate Management コネクタで環境の情報から これといった特徴がないのが特徴
3.Power Apps for Makers コネクタで環境の情報から これといった特徴がないのが特徴
4.SharePoint Rest API から REST APIを使うのでハードルちょっと高め
5.Microsoft Teams コネクタから シンプル
全くチームに属していないアカウントでは取得できない

 

【参考】処理時間に違いはあるか?

参考までに、こんなクラウドフローを作成して処理時間に違いがないか計測してみました。

私の環境では「2.Power Automate Management コネクタで環境の情報から」の方法のみやや処理時間が長い傾向がありました。その他は大きな差はありませんでした。

方法 1回目 2回目 3回目 4回目 5回目 平均
1.Graph API の/organization エンドポイントから💎 0.8 0.5 0.7 0.3 0.3 0.52
2.Power Automate Management コネクタで環境の情報から 3 3 0.9 2 2 2.18
3.Power Apps for Makers コネクタで環境の情報から 1 1 0.7 0.3 0.2 0.64
4.SharePoint Rest API から 0.7 0.7 1 0.5 0.5 0.68
5.Microsoft Teams コネクタから 0.7 0.8 1 0.6 0.5 0.72

 

 

参考にしたページ

powerusers.microsoft.com

 

powerusers.microsoft.com