2026年6月15日、Microsoft Teams TechCommunityに「How to Remove Teams Chat Threads with PowerShell」が投稿されました。結論からいうと、これはTeamsの新機能配信や仕様変更の告知ではありません。問題のあるTeamsチャットをMicrosoft Graph PowerShellで検出し、管理者がスレッド単位で削除するサンプルスクリプトの更新情報です。
一般ユーザーに設定変更やTeamsアプリの更新は必要ありません。一方、管理者が利用する場合は、削除対象の誤判定、Microsoft Graphの強い権限、7日間の復元期限に注意が必要です。Microsoft公式サイト内の投稿ですが、内容はMicrosoft MVPによるコミュニティ投稿であり、製品ロードマップやMicrosoft 365 Message Centerの変更通知とは位置づけが異なります。(TECHCOMMUNITY.MICROSOFT.COM)
Microsoft Teams TechCommunityの変更点は管理スクリプトの更新
今回紹介されたPowerShellスクリプトは、2023年に公開されたTeamsチャット削除用コードを、現在のMicrosoft Graph PowerShell SDKに合わせて更新したものです。
主な変更点は次のとおりです。
| 変更項目 | 変更内容 | 管理者への影響 |
|---|---|---|
| Graph APIの利用先 | Beta版コマンドレットからv1.0の正式版コマンドレットへ変更 | Beta版の仕様変更による動作停止リスクを抑えられる |
| 検索対象ユーザー | Teamsのサービスプランが割り当てられたユーザーに限定 | 不要なアカウント処理を減らせる |
| 判定対象 | チャット名だけでなくメッセージ本文も検索 | 無題のチャットや本文内の問題表現も検出できる |
| 検索方法 | HTMLタグを除去し、正規表現で指定語句を照合 | 複数の禁止語句をまとめて検索できる |
| 検索期間 | 初期設定では過去1カ月に限定 | 処理時間を短縮できるが、古いチャットは対象外になる |
| テナント制限 | 自テナントが起点となるチャットに限定 | 外部テナント起点のチャットを誤って処理しにくい |
| 実行結果 | ExcelまたはCSVでレポートを作成し、メール送信 | 削除履歴を確認・保存しやすい |
| 実行環境 | 対話実行とAzure Automationを想定 | 緊急対応と定期処理の両方に応用できる |
更新後のスクリプトでは、Get-MgUserChat、Get-MgChatMessage、Get-MgUserChatMember、Remove-MgChatなど、Microsoft Graph v1.0側のコマンドレットが使われています。Microsoftも、本番用スクリプトでは可能な限りBeta版ではなくv1.0を利用するよう案内しています。(Office 365 for IT Pros)
誰に影響するのか
一般ユーザー
通常は対応不要です。Teamsアプリの更新や個人設定の変更も求められていません。
ただし、管理者が対象チャットを削除すると、該当するチャットスレッドがTeamsクライアントの表示から消えます。サーバー側の処理後、各クライアントへ反映されるまで多少時間がかかる場合があります。(Office 365 for IT Pros)
Microsoft 365・Teams管理者
次のようなケースで影響があります。
- 全社向けグループチャットにスパムが投稿された
- 機密情報や不適切な内容が広範囲に共有された
- 問題のあるチャットを参加者全員の表示から早急に除去したい
- 2023年版など、Betaコマンドレットを使った旧スクリプトを運用している
特に注意したいのは、一致したメッセージだけではなく、チャットスレッド全体が削除対象になる点です。1件のメッセージが指定語句に一致しただけでも、そのチャット内の正常な会話を含めて表示から除去されます。
コンプライアンス・法務担当者
Teams画面からチャットが消えることと、コンプライアンスデータが完全に消去されることは同じではありません。
Microsoft Purviewの保持ポリシーや保留が適用されている場合、Teams上で表示されなくなったメッセージでも、コンプライアンス用コピーが保持され、eDiscoveryで検索できることがあります。削除前に、法務・監査・情報セキュリティ部門との確認が必要です。(Microsoft Learn)
削除できるチャットと削除できない会話
Microsoft Graphのチャット削除APIが対応する範囲は次のとおりです。
| 会話の種類 | API上の削除対応 | 公開スクリプトの初期設定 |
|---|---|---|
| 1対1チャット | 対応 | 対象外 |
| グループチャット | 対応 | 対象 |
| 会議チャット | 対応 | 対象 |
| チャネル投稿・返信 | 非対応 | 対象外 |
Microsoft GraphのAPI自体は1対1チャット、グループチャット、会議チャットを削除できますが、チャネル内の投稿や返信は削除できません。また、外部ユーザーを含むチャットでは、原則としてチャットを開始したユーザーが所属するテナントの管理者だけが削除できます。(Microsoft Learn)
解説記事では1対1チャットも対象に拡張したと説明されていますが、2026年6月19日時点の公開スクリプトには、次のフィルターが設定されています。
(chatType eq 'Group' or chatType eq 'Meeting')
そのため、公開コードを変更せずに実行した場合、1対1チャットは検索されません。1対1チャットも対象にするにはフィルターの修正が必要ですが、対象件数とメッセージ取得量が大きく増える可能性があります。(Office 365 for IT Pros)
設定・更新・移行・料金・期限の確認ポイント
| 確認項目 | 結論 |
|---|---|
| 設定 | Teams管理センターのスイッチではなく、Microsoft Graph PowerShellとアクセス許可を設定する |
| 更新 | 旧スクリプト利用者はBeta版コマンドレットからv1.0版への更新を検討する |
| 移行 | Teamsクライアントやテナント設定の強制移行はない |
| 料金 | 今回の投稿に追加料金や価格改定の記載はない |
| 公開期限 | ロールアウト期限や強制対応日は示されていない |
| 復元期限 | 削除後7日以内であれば管理者が復元可能 |
| API制限 | テナントごとに1秒当たり1件の削除要求が上限 |
今回の情報は、有料オプションの追加やライセンス体系変更ではありません。Azure Automationなどを使用する場合は、組織の既存契約やAzureの利用状況に応じてコストを確認してください。
最も重要な期限は、機能の移行期限ではなく削除後7日間の復元可能期間です。7日を過ぎたチャットは、チャット削除APIの復元機能では戻せません。(Microsoft Learn)
必要なMicrosoft Graph権限
公開スクリプトでは、次のアクセス許可が指定されています。
| アクセス許可 | 用途 |
|---|---|
User.Read.All | テナント内の対象ユーザーを取得する |
Chat.ReadWrite.All | チャットとメッセージを取得する |
Chat.ManageDeletion.All | チャットを削除・復元する |
Mail.Send | 処理結果のレポートをメール送信する |
これらはテナント全体のユーザーやチャットにアクセスできる強い権限です。サンプルに書かれているという理由だけで、本番用アプリへ無条件に付与してはいけません。
メール送信が不要ならMail.Sendを外す、特定の処理だけを実行するなら権限を分離するなど、最小権限の原則に沿って設計します。チャット削除APIでは、委任アクセスの場合にテナント管理者またはTeamsサービス管理者が必要です。(GitHub)
管理者が実施する確認手順
Microsoft Graph PowerShell SDKを確認する
MicrosoftはPowerShell 7以降を推奨しています。既存環境では、SDKとコマンドレットの有無を確認します。
Get-InstalledModule Microsoft.Graph
Get-Command Get-MgUserChat
Get-Command Get-MgChatMessage
Get-Command Get-MgUserChatMember
Get-Command Remove-MgChat
未導入の場合は、次のようにインストールできます。
Install-Module Microsoft.Graph `
-Scope CurrentUser `
-Repository PSGallery `
-Force
既に導入済みの場合は、依存関係を含めて検証したうえで更新します。
Update-Module Microsoft.Graph
Microsoft.Graph全体を導入すると多数のサブモジュールがインストールされます。本番環境では、必要なサブモジュールだけを導入する方法も検討してください。(Microsoft Learn)
認証方式を決める
自分自身のチャットだけを処理する場合と、テナント全体を処理する場合では認証方式が異なります。
テナント全体のユーザーチャットを取得するには、基本的にアプリケーション権限を使用したアプリ専用認証が必要です。Azure AutomationではマネージドID、手動実行では証明書を使ったアプリ認証などを検討します。
単純な対話サインインだけでは、サインインした本人以外のチャット取得に失敗する可能性があります。Microsoft Graphの仕様でも、別ユーザーのチャットを取得する処理にはアプリケーション権限が必要とされています。(Microsoft Learn)
検索条件を組織向けに変更する
最低限、次の項目を変更します。
- 検索開始日と終了日
- 対象とするチャット種別
- 検索する語句
- 対象ユーザー
- レポート送信元と送信先
- 削除対象テナント
- 除外する役員・法務・監査用アカウント
初期設定では過去1カ月が検索対象です。インシデントの発生日が分かっている場合は、数日から1週間程度に絞った方が、処理時間と誤判定を減らせます。
削除せずにレポートだけ作成する
本番で最初からRemove-MgChatを実行するのは危険です。まず削除処理を無効化し、候補となったチャットID、参加者、作成日時、該当語句をレポートへ出力します。
候補を人が確認し、承認されたチャットだけを削除する二段階方式が安全です。Remove-MgChatには-WhatIfと-Confirmも用意されています。(Microsoft Learn)
削除後の復元手順を用意する
削除時には、少なくとも次の情報を保存します。
- Chat ID
- 削除日時
- チャット種別
- 参加者
- 検出された語句
- 承認者
- 実行者
- インシデント管理番号
誤削除が判明した場合は、7日以内に復元APIを使用します。PowerShellでは、次のコマンドレットが用意されています。
Undo-MgTeamworkDeletedChatDelete `
-DeletedChatId $DeletedChatId
復元可能期間を過ぎないよう、削除後7日間は処理結果を監視してください。(Microsoft Learn)
公開スクリプトをそのまま実行する前の注意点
$UserId変数を確認する
2026年6月19日時点の公開スクリプトでは、チャットメンバー取得部分に次の記述があります。
Get-MgUserChatMember -UserId $UserId -ChatId $Chat.Id
一方、更新版のユーザー処理ループ内では、$UserIdへの代入が確認できません。そのまま実行すると、チャットメンバー取得でエラーになる可能性があります。
次のように、現在処理中のユーザーIDを直接指定する方法を検討します。
Get-MgUserChatMember -UserId $User.Id -ChatId $Chat.Id
サンプルコードは完成済みの製品ではありません。公開元も、非本番環境で検証し、組織の要件に合わせて修正してから使用するよう注意しています。(GitHub)
キーワード一致だけで自動削除しない
更新版では、指定した複数の語句を正規表現にまとめ、メッセージ本文と照合します。ただし、意味や文脈を理解する仕組みではありません。
例えば「機密プロジェクトA」という語句を登録すると、次のような正常なメッセージまで一致します。
「機密プロジェクトAという名称は使用しないでください」
日本語では、全角・半角、表記揺れ、伏せ字、改行でも検出結果が変わります。単純なキーワード一致は候補抽出に使い、削除判断は人が行う運用が適しています。
同じチャットを重複処理しない
グループチャットは複数ユーザーのチャット一覧に現れます。テナント内のユーザーを順番に処理すると、同じChat IDが複数回取得される可能性があります。
処理済みChat IDをハッシュセットなどに保存し、同じチャットを二度削除しない仕組みを追加すると、エラーと無駄なAPI呼び出しを減らせます。
保持ポリシーの代わりに使わない
このスクリプトは、問題のあるチャットをユーザーの画面から早急に除去するインシデント対応向けです。
長期的な情報管理には、Microsoft Purviewの保持ポリシー、eDiscovery、監査、DLPなどを使用します。Teamsで見えなくなったことだけを確認して「完全に削除できた」と判断しないことが重要です。
まとめ:まず報告モードで検証し、7日以内に戻せる体制を作る
Microsoft Teams TechCommunityの「How to Remove Teams Chat Threads with PowerShell」は、Teamsの新機能や強制変更ではなく、管理者向けPowerShellサンプルの更新情報です。
管理者は、旧Betaコマンドレットの利用状況を確認し、v1.0版への更新を検討してください。ただし、公開スクリプトをそのまま本番実行するのではなく、認証方式、変数、1対1チャットの扱い、検索語句、重複処理を見直す必要があります。
最初に削除なしの報告モードで候補を抽出し、承認後にスレッド単位で削除します。削除したChat IDを必ず記録し、誤削除を7日以内に復元できる運用まで用意してから導入するのが安全です。

コメント