Microsoft Teams のタグ情報を Graph API で一括取得し、Excel に出力する方法

Microsoft Teams のタグ機能は、ユーザーを役割やグループごとに分類し、チャットやメンションを効率化するための便利な仕組みです。

しかし、複数のチームや大量のタグ・メンバー情報を手作業で管理するのは現実的ではなく、管理工数が増えたり、情報の見落としにつながったりする可能性があります。

管理のために Power Automate の「タグのメンバーを一覧表示する」アクションを使用して出力するなどの方法がありますが、このアクションでは 100 人までの情報しか取得できない制限があります。

本記事では、Microsoft Graph API と PowerShell を組み合わせ、複数チームのタグ情報とメンバー情報を一括取得し、Excel に整理された形で出力する自動化手法をご紹介します。

概要

本手法では、次の処理を自動化します。

  • 複数の Teams チームに存在するタグ情報の一括取得
  • 各タグに属するメンバーの UPN(ユーザー ID)とタグメンバー ID の取得
  • チームごとに 1 ファイルの Excel に出力
  • 各タグごとに 1 シートを作成し、表形式でデータ整理

出力ファイル例:

デスクトップ\Teamsタグ整備_ITSリスト\営業チーム.xlsx  
└ 部長シート、一般社員シート など

必要な準備

Microsoft Entra ID アプリ登録

  1. Azure Portal にサインインし、「Microsoft Entra ID」>「アプリの登録」>「新規登録」を選択します。
  2. アプリケーションの登録を行います。登録情報の例は下記の通りです。

    • 名前:ExportTeamsTagsApp(任意)
    • サポートされるアカウント:この組織のみ(シングルテナント)
    • リダイレクト URI:https://localhost または省略
  3. 登録後、クライアント IDとテナント ID を控えておきます。

クライアントシークレットの作成

  1. 登録したアプリの「概要」ページを開き、「証明書とシークレット」メニューに移動し、「新しいクライアント シークレット」をクリックします。
  2. 説明(任意のメモ)と有効期限を選択し、「追加」をクリックします。
  3. 作成直後に表示される 値(シークレットの値) をコピーし、安全な場所に保存します。
    ※一度しか表示されないので注意してください。
  4. スクリプト内の以下の部分に、取得したクライアントシークレットを入力します。
$clientSecret = "<ここにクライアントシークレットを入力>"

Graph API 権限設定

登録したアプリのページに戻り、「APIのアクセス許可」>「アクセス許可の追加」>「Microsoft Graph」を選択します。

次の権限を アプリケーション権限 で追加し、管理者による同意を実施します。

API 権限 種類
Microsoft Graph TeamworkTag.Read.All Application
Microsoft Graph User.Read.All Application

実行環境の前提

スクリプトの実行に必要なる実行環境を確認しておきます。必要に応じてインストールを行ってください。

  • PowerShell 5.1 以降
  • ローカルに Microsoft Excel(Office または Microsoft 365)がインストールされていること

スクリプトの処理内容

作成したスクリプトの大まかな流れは以下の通りです。

  1. クライアント資格情報フローで Graph API に認証します。
  2. 各 Teams チームのタグ一覧を取得します。
  3. 各タグのメンバー情報をページネーション対応で取得します。
  4. チームごとに 1 ファイルの Excel を作成します。
  5. タグごとに 1 シートを作成し、テーブル化して出力します。

実際に作成したスクリプトはこちらです。これを、「ExportTeamsTagsToExcel.ps1」として保存しておきます。

# ============================
# Graph API 利用スクリプト(1チーム1ファイル・シート分割)
# 出力構成:デスクトップ\Teamsタグ整備_ITSリスト\チーム名.xlsx
# ============================

# 認証情報
$tenantId = "<テナントID>"
$clientId = "<クライアントID>"
$clientSecret = "<クライアントシークレット>"

# 複数チーム設定
$groupIds = @(
    @{ Id = "00000000-1111-2222-3333-444444444444"; Name = "営業チーム" },
    @{ Id = "aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"; Name = "開発チーム" }
)

# 出力先:デスクトップ\Teamsタグ整備_ITSリスト
$desktopPath = [Environment]::GetFolderPath("Desktop")
$rootFolder = Join-Path $desktopPath "Teamsタグ整備_ITSリスト"
New-Item -Path $rootFolder -ItemType Directory -Force | Out-Null

# トークン取得
$body = @{
    grant_type    = "client_credentials"
    scope         = "https://graph.microsoft.com/.default"
    client_id     = $clientId
    client_secret = $clientSecret
}
$tokenResponse = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Body $body
$accessToken = $tokenResponse.access_token
$headers = @{ Authorization = "Bearer $accessToken" }

# チームごとに処理
foreach ($team in $groupIds) {
    $groupId = $team.Id
    $teamName = $team.Name -replace '[\\/:*?"<>|]', '_'
    $teamFile = Join-Path $rootFolder "$teamName.xlsx"

    # Excel 起動とブック作成(1ファイルに複数シート)
    $excel = New-Object -ComObject Excel.Application
    $excel.Visible = $false
    $workbook = $excel.Workbooks.Add()

    # タグ一覧取得
    $tagsUrl = "https://graph.microsoft.com/v1.0/teams/$groupId/tags"
    $tags = Invoke-RestMethod -Headers $headers -Uri $tagsUrl -Method Get

    $sheetIndex = 1
    foreach ($tag in $tags.value) {
        $tagId = $tag.id
        $tagName = $tag.displayName
        $safeTagName = $tagName -replace '[\\/:*?"<>|]', '_'
        $tableName = ($safeTagName -replace '\\W+', '_')
    }
}

実行手順

  1. PowerShell を 管理者権限で起動します。
  2. 実行ポリシーを一時変更します。(必要な場合)

    Set-ExecutionPolicy RemoteSigned -Scope Process

  3. スクリプト保存先に移動し、スクリプトを実行します。

    cd "C:\スクリプト保存先"
    .\ExportTeamsTagsToExcel.ps1

  4. 実行後、出力フォルダーを確認します。

    デスクトップ\Teamsタグ整備_ITSリスト\
    ├ 営業チーム.xlsx (シート:部長、一般社員 等)
    └ 開発チーム.xlsx (シート:リーダー、メンバー 等)

  5. タグごとにタグメンバー ID と UPN が出力されている事を確認します。

注意点

  • 本スクリプトは Excel の COM オブジェクトを利用するため、実行端末に Microsoft Excel のインストールが必須です。
  • Graph API のページネーション対応済みですが、処理対象が多い場合は実行時間が長くなる可能性があります。
  • クライアントシークレットは適切に保管し、定期的な更新を推奨します。
  • PowerShell 実行時に Excel のプロセスが残らないよう、正常終了を確認してください。

まとめ

本記事では、Teams のタグ情報管理を効率化するための PowerShell と Graph API による自動取得と、Excel へ出力する手法を紹介しました。

執筆担当者プロフィール
志垣 実愛

志垣 実愛(日本ビジネスシステムズ株式会社)

クラウドソリューション事業本部に所属。Power Platformを活用した業務改善に取り組んでいます。

担当記事一覧