Microsoft Teams「How to Remove Teams Chat Threads with PowerShell」の変更点

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日以内に復元できる運用まで用意してから導入するのが安全です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次