Microsoft Teams のタグ機能は、ユーザーを役割やグループごとに分類し、チャットやメンションを効率化するための便利な仕組みです。
しかし、複数のチームや大量のタグ・メンバー情報を手作業で管理するのは現実的ではなく、管理工数が増えたり、情報の見落としにつながったりする可能性があります。
管理のために Power Automate の「タグのメンバーを一覧表示する」アクションを使用して出力するなどの方法がありますが、このアクションでは 100 人までの情報しか取得できない制限があります。
本記事では、Microsoft Graph API と PowerShell を組み合わせ、複数チームのタグ情報とメンバー情報を一括取得し、Excel に整理された形で出力する自動化手法をご紹介します。
概要
本手法では、次の処理を自動化します。
- 複数の Teams チームに存在するタグ情報の一括取得
- 各タグに属するメンバーの UPN(ユーザー ID)とタグメンバー ID の取得
- チームごとに 1 ファイルの Excel に出力
- 各タグごとに 1 シートを作成し、表形式でデータ整理
出力ファイル例:
デスクトップ\Teamsタグ整備_ITSリスト\営業チーム.xlsx └ 部長シート、一般社員シート など
必要な準備
Microsoft Entra ID アプリ登録
- Azure Portal にサインインし、「Microsoft Entra ID」>「アプリの登録」>「新規登録」を選択します。

アプリケーションの登録を行います。登録情報の例は下記の通りです。
- 名前:
ExportTeamsTagsApp(任意) - サポートされるアカウント:この組織のみ(シングルテナント)
- リダイレクト URI:
https://localhostまたは省略

- 名前:
- 登録後、クライアント IDとテナント ID を控えておきます。

クライアントシークレットの作成
- 登録したアプリの「概要」ページを開き、「証明書とシークレット」メニューに移動し、「新しいクライアント シークレット」をクリックします。

- 説明(任意のメモ)と有効期限を選択し、「追加」をクリックします。

- 作成直後に表示される 値(シークレットの値) をコピーし、安全な場所に保存します。
※一度しか表示されないので注意してください。
- スクリプト内の以下の部分に、取得したクライアントシークレットを入力します。
$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)がインストールされていること
スクリプトの処理内容
作成したスクリプトの大まかな流れは以下の通りです。
- クライアント資格情報フローで Graph API に認証します。
- 各 Teams チームのタグ一覧を取得します。
- 各タグのメンバー情報をページネーション対応で取得します。
- チームごとに 1 ファイルの Excel を作成します。
- タグごとに 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+', '_') } }
実行手順
- PowerShell を 管理者権限で起動します。
実行ポリシーを一時変更します。(必要な場合)
Set-ExecutionPolicy RemoteSigned -Scope Processスクリプト保存先に移動し、スクリプトを実行します。
cd "C:\スクリプト保存先"
.\ExportTeamsTagsToExcel.ps1実行後、出力フォルダーを確認します。
デスクトップ\Teamsタグ整備_ITSリスト\
├ 営業チーム.xlsx (シート:部長、一般社員 等)
└ 開発チーム.xlsx (シート:リーダー、メンバー 等)タグごとにタグメンバー ID と UPN が出力されている事を確認します。

注意点
- 本スクリプトは Excel の COM オブジェクトを利用するため、実行端末に Microsoft Excel のインストールが必須です。
- Graph API のページネーション対応済みですが、処理対象が多い場合は実行時間が長くなる可能性があります。
- クライアントシークレットは適切に保管し、定期的な更新を推奨します。
- PowerShell 実行時に Excel のプロセスが残らないよう、正常終了を確認してください。
まとめ
本記事では、Teams のタグ情報管理を効率化するための PowerShell と Graph API による自動取得と、Excel へ出力する手法を紹介しました。