Power AutomateのSearch for users (V2)でアクティブユーザーを効率的に取得する方法

近年、多様な業務アプリケーションとの連携を容易にするMicrosoft Power Automateは、様々な企業で導入が進んでいます。中でも、Office 365のユーザー情報をフロー内で活用するケースは多く、効率的な処理を実現するうえで重要なポイントとなります。本記事では、Power Automateの「Search for users (V2)」アクションを用いてアクティブユーザーのみを取得し、ユーザー情報を有効活用するための設定方法や応用テクニックをわかりやすく解説します。これを読めば、アクティブユーザーへの絞り込みや大量データの取り扱いに関するポイントがきっとクリアになるはずです。最後までぜひご覧ください。

「Search for users (V2)」アクションの概要

Power Automateの「Search for users (V2)」アクションは、Microsoft 365 (旧Office 365) 上のユーザーアカウント情報を検索し、取得してくれる便利な機能です。ユーザー情報を自動で取り込んだり、他のシステムと連携させたりする際には欠かせないアクションのひとつです。

基本的な使い方

「Search for users (V2)」アクションをフローに追加すると、主に以下のようなパラメーターを指定できます。

  • Search term: ユーザーを検索する文字列や条件
  • Top: 取得するユーザーの最大件数(1~1000件)
  • Select: 取得したいユーザー属性の絞り込み(ID、DisplayNameなど)
  • Search scope: 検索対象の範囲や条件指定

たとえば、部署単位でユーザーを取得するときには「Search term」に部署名を入れたり、メールアドレス部分一致でユーザーを取り出すなど、さまざまな用途に合わせて検索が行えます。

アクティブユーザーを取得する必要性

組織では退職者や異動者、または一時的にアカウントを無効化したユーザーが存在します。そのため、フローでユーザー情報を扱う際には「Account Enabled = true」つまりアクティブなアカウントのみを対象としたいシーンが多々あります。不要なアカウントまで含まれると、後続の処理が煩雑になったり、誤ったデータが混入したりするリスクが高まります。

デフォルトの上限とPagination機能

最大1000件までの制限

「Search for users (V2)」アクションでは、デフォルト設定のままでは一度の検索で取得できるユーザー数が最大1000件に制限されています。企業規模によっては、ユーザー数が1000件を超えることは珍しくありません。そんなとき、上限を超えたユーザーは取得されず、想定外の不備が生じる可能性があります。

Top パラメーターの調整

アクション設定の中にある「Top」を調整することで、たとえば上限値の1000件を指定したり、逆に小さな値に制限して検索結果を絞ったりできます。しかし、企業規模が大きい場合やグローバル展開している組織では、1000件を軽々と上回ってしまうため、これだけでは不十分です。

Paginationの活用

1000件以上のユーザーを取得したい場合には、Pagination機能が役立ちます。Paginationを有効にし、取得するレコード数の最大値を10,000に変更することによって、最大10,000件までユーザー情報を取得できます。この設定は以下のように行います。

  1. 「Search for users (V2)」アクションを追加
  2. アクションの「…」メニュー(右上の縦の「…」)からSettingsを選択
  3. Paginationを「On」にする
  4. Thresholdを取得したい最大件数(例:10,000)に設定

これにより、アクションの実行時に自動的にページをめくりながら最大10,000件のデータを取得します。

10,000件を超える場合

10,000件を超えるユーザーが存在する場合、Paginationを使っても全てを一度に取得するのは難しくなります。そのため、以下のような方法で分割取得やAPIの活用を検討しましょう。

  • 部署別など、検索条件を複数回に分けて実行して合算する
  • Microsoft Graph APIを用いてODataクエリで絞り込みとページングを手動管理する

組織の規模や要件に合わせて最適なアプローチを選択することが大切です。

アクティブユーザー(Account Enabled = true)の絞り込み方法

直接フィルターができないケース

「Search for users (V2)」のアクションでは、ODataクエリのような高度なフィルタリングを直接サポートしていない場合があります。「Account Enabled = true」と指定して検索を行いたくても、アクション側で直接パラメーターを設定する機能が見当たらないことが多いのです。結果的に取得した後で不要なレコードを除外する形になります。

Conditionアクションでの絞り込み

最も一般的で手軽なのは、取得したユーザー一覧を「Apply to each」などでループ処理し、「Condition」アクションを使って @equals(item()?['accountEnabled'], true) のように判定を入れる方法です。たとえば、フロー上で以下のようなステップを組み立てます。

  1. 「Search for users (V2)」でユーザー情報を取得(Paginationを有効にしておく)
  2. 「Apply to each」アクションで「Search for users (V2)」の結果をループ
  3. 「Condition」アクションで以下のように設定
  • 左オペランド: accountEnabled
  • 演算子: is equal to
  • 右オペランド: true
  1. 真(Yes)の場合のみ、必要な操作(SharePointリストへの登録やExcelへの書き込みなど)を実行

これだけでも「アクティブユーザーのみを処理する」ワークフローを作りやすくなります。

Conditionアクションの実装例

flowchart TB
    A[Search for users (V2)] --> B[Apply to each (User)]
    B --> C{Condition: accountEnabled = true?}
    C -- Yes --> D[SharePointに書き込み]
    C -- No --> E[何も処理しない]

このように、フローを視覚化すると理解しやすくなります。

大量ユーザーの取得を可能にするMicrosoft Graph APIの活用

Microsoft Graph API とは

Microsoft Graph APIは、Office 365(Microsoft 365)やAzure Active Directoryを含む様々なMicrosoftサービスとプログラム的に連携するためのREST API群です。ユーザー、グループ、メール、カレンダーなど多種多様なデータにアクセスできます。Power AutomateでもHTTPアクションやカスタムコネクタを利用してGraph APIを呼び出すことで、より柔軟な検索やフィルタリングが可能になります。

ODataクエリでのフィルタリング

Graph APIを使う場合、「/users」エンドポイントに対してODataクエリパラメータを付与することで、直接「accountEnabled eq true」を指定できます。実際のHTTPリクエスト例は以下のようになります。

GET https://graph.microsoft.com/v1.0/users?$filter=accountEnabled eq true
Authorization: Bearer {アクセストークン}

このようにクエリで指定することで、最初からアクティブユーザーのみを取得できます。また、$top$skip パラメーターを組み合わせれば、ページングも柔軟に管理可能です。

Graph API呼び出しの例(HTTPアクション)

- name: Get Active Users
  type: HTTP
  inputs:
    method: GET
    uri: https://graph.microsoft.com/v1.0/users?$filter=accountEnabled eq true&$top=100
    headers:
      Authorization: "Bearer @{variables('myAccessToken')}"

上記の例では、一度に最大100件まで取得し、結果の中に@odata.nextLinkが含まれていれば、それを用いて繰り返し取得処理を行います。これにより、10,000件やそれ以上の大量データも分割で完全に取得することが可能です。

「Search for users (V2)」の実践的なTips

検索語(Search term)を活用する

部署名やドメイン名など、検索軸として利用できる情報を「Search term」に入れることで、必要最小限のユーザーだけを取り込む工夫ができます。これにより、不要なユーザーをあらかじめ除外し、フロー実行の負荷を軽減しやすくなります。

取得フィールドの選択 (Select)

ユーザーオブジェクトには非常に多くの属性が含まれていますが、「Select」パラメーターを設定して必要な属性だけを取得することで、ネットワーク負荷やデータ処理量を抑えることができます。たとえば、メールアドレスと表示名だけが必要なら、"mail,displayName"と指定すると効率が良いでしょう。

テーブルでの属性例

属性名説明
idユーザー固有のID
displayNameユーザーの表示名(フルネームなど)
mailメールアドレス
accountEnabledアカウントが有効ならTrue、それ以外はFalse
userPrincipalNameユーザーログイン名 (UPN)

このように、あらかじめ必要な属性を洗い出して選択しておくことで、不要な情報を除外し、処理をスムーズに行えます。

運用上の注意点とトラブルシュート

エラーが発生した際の対処

多くのユーザーを取得しようとした際に、タイムアウトやAPIの呼び出し制限に達するケースがあります。Paginationを有効にするだけで解決しない場合は、以下のような点を確認しましょう。

  • 検索条件を細かく分割: 大量のユーザーを一括で取得しようとせず、組織単位や地域単位など、複数回に分ける
  • 実行間隔の調整: フローがAPIに対して過剰に高頻度でリクエストを送っていないか見直す
  • HTTP 429 (Too Many Requests) 対策: バックオフロジックを取り入れるか、待機時間を設定する

権限不足によるデータ取得失敗

Office 365またはAzure Active Directoryでユーザー情報を取得するには、適切な権限が付与されたコネクションである必要があります。特にGraph APIを利用する場合は、アプリ登録とトークン取得周りの設定が誤っているとデータが取得できません。管理者と連携して、必要な権限(Directory.Read.Allなど)が付与されているか確認しましょう。

シナリオ別の実装例

シナリオ1: SharePointリストへのアクティブユーザー一覧登録

  1. 「Search for users (V2)」アクションでユーザーを取得(Pagination有効)
  2. 「Apply to each」でユーザーをループ
  3. 「Condition」で accountEnabled = true を判定
  4. Trueの場合のみ「Create item」アクションでSharePointリストに登録
  5. Listには「ユーザー名」「メールアドレス」「所属部署」など必要カラムを用意

これにより、SharePointのリストに常に最新のアクティブユーザー情報を反映させることができます。定期実行のスケジュールトリガーと組み合わせると、メンテナンスの手間を大幅に削減できるでしょう。

シナリオ2: Office 365 グループのメンバー自動追加

社内の部署移動などでアクティブユーザーを別グループに自動的に追加したい場合、「Search for users (V2)」でアクティブユーザーを全取得し、所属していないユーザーのみを判定して「Add member to group」アクションを実行するフローが考えられます。退職者やアカウント無効化されたユーザーは除外されるので、余計な手間がかかりません。

実装上のポイント

  • グループメンバー管理を自動化する際には、あらかじめグループのIDを取得しておく
  • 「Get group members」アクションと組み合わせてメンバーの重複追加を防ぐ
  • 動作確認のためにテスト用のグループ環境で検証してから本番グループに適用する

まとめ

Power Automateの「Search for users (V2)」アクションを使うと、Office 365のユーザー情報を手軽に取得・活用できますが、以下のようなポイントを押さえておくと運用がよりスムーズになります。

  • 最大1000件までしか取得できないデフォルト設定: Pagination機能を有効にして最大10,000件まで取得
  • アクティブユーザー(Account Enabled = true)の抽出: フロー内でConditionを使うか、Graph APIを利用してODataクエリを適用
  • 10,000件を超える大量ユーザー: 検索条件の分割やGraph APIによるページングを検討
  • Selectパラメーター: 不要な属性を除外し、必要なデータだけを取得
  • 権限設定: 管理者権限やアプリ登録の設定が正しいか確認

もし「Search for users (V2)」で対応できないフィルタリングや大量データ処理が必要な場合は、Microsoft Graph APIを組み合わせることで柔軟に対処できます。アクティブユーザーだけを取り込みたいというニーズも、Graph APIであれば $filter=accountEnabled eq true と指定するだけで済むので非常に便利です。

フロー作成時はパフォーマンスや権限を考慮しつつ、目的に合わせて「Search for users (V2)」とGraph APIを使い分けてみてください。これらのテクニックを駆使することで、組織の運用効率は格段に向上し、最新かつ正確なユーザーデータをいつでも活用できるようになるでしょう。

コメント

コメントする