PowerShell を使用して Exchange Server (Microsoft 365) 上のユーザー メールボックスからメールを検索および削除する方法

Exchangeからメールを一括削除する方法を解説します。特に役割やツールが分かりにくい場合に有効です。

プライベートなメールや機密性の高いメールが紛れ込んでしまい、全ユーザーのメールボックスから早急に削除しなければならない状況に陥ったとします。従業員が送信したメールをすぐに削除しなければならない場合もあれば、コンプライアンス当局から特定のメッセージを消去するよう指示された場合などです。理由が何であれ、Search-Mailboxなどの組み込みツールや、新しいコンプライアンスコマンドが頼りになります。しかし、正直なところ、オンプレミスのExchangeとクラウドを混在させている場合は特に、これは迷路のようなものです。また、権限設定も忘れてはいけません。権限設定だけでも1話分の価値があります。このガイドでは、効果的な方法、必要な手順、そしてその過程で役立つヒントをいくつか紹介します。

PowerShellを使用してExchangeでメールを一括削除する方法

権限チェック:アカウントが正当であることを確認する

  • オンプレミスのExchangeでは、メールボックスのインポート/エクスポートメールボックスの検索の役割が必要です。これらはデフォルトでは割り当てられていないため、手動で割り当てる必要があるでしょう。Exchangeサーバーに接続したPowerShellで、以下を実行してください。
New-ManagementRoleAssignment -User j.anderson -Role "Mailbox Import Export" New-ManagementRoleAssignment -User j.anderson -Role "Mailbox Search"

Exchange Online (Microsoft 365) でも同様の機能がありますが、Discovery Managementのような役割を通じて提供されます。Discovery Managementグループに自分自身を追加するか、役割を直接割り当てることができます。

Add-RoleGroupMember "Discovery Management" -Member [email protected] Add-RoleGroupMember "Mailbox Import-Export Management" -Member [email protected]

ヒント:設定によっては、ロールが保持されない場合は、PowerShellセッションを再起動するか、ロールの割り当て後に再接続してください。これは、Windows側で必要以上に難しくする必要があるためです。

Search-Mailboxを使用してメールを検索および消去する

このコマンドは、ユーザーのメールボックスから特定の条件に一致するメールを取得するのに便利です。検索と削除の2つの機能があります。Microsoftは新しいツールの使用を推奨しているので、少し奇妙に思えますが、手軽な作業であれば、一部のバージョンでは今でも使えます。

  • 特定の件名のメールを検索するには:
Search-Mailbox -Identity k.peterson -SearchQuery 'Subject:"Annual Report"'

または、組織内のすべてをスキャンするには:

Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Annual Report"'

警告: Microsoft 365 では、このコマンドレットはメールボックスごとに最大 10, 000 件までしか結果を取得できません。それを超える結果が返された場合は、コマンドレットを分割するか、 New-ComplianceSearchに切り替える必要があります(詳細は後述)。

削除前に検索結果を推定して確認する

  • 一致するメッセージの数を推定したいだけの場合は、次を使用します。
Get-Mailbox | Search-Mailbox -SearchQuery 'Subject:"report"' -EstimateResultOnly | Select-Object Identity, ResultItemsCount, ResultItemsSize | Where-Object ResultItemsCount -gt 0

実際に削除するのではなく、統計情報のみを素早くプレビューできます。誤って大量削除してしまうのを防ぐのに便利です。

メールを安全かつ効果的に削除する

  • 見つかったメールを削除するには、-DeleteContentを追加します。プロンプトをスキップしたい場合は、-Forceを使用してください。
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'from:"[email protected]"' -DeleteContent -Force

重要: 削除しようとしているものを必ず最初に確認してください。-EstimateResultOnlyまたは を使用してください-LogOnly。すぐに削除したくなりますが、クエリを間違えると、意図しないものを消去してしまう可能性があります。

もう一つ注意点があります。大量のメールを削除する場合は、1回の検索で10, 000件までという制限にご注意ください。メールボックスデータベースまたはサーバーごとに検索を分割して実行することで、この制限を回避できます。これを何度も繰り返すのは面倒ですが、古いExchangeの設定ではこれが現実です。

キーワード、添付ファイル、日付を使った詳細検索の使用

  • 例: 自分のドメインではなく、件名に「Secret」が含まれるメールを検索します。
Search-Mailbox -Identity k.peterson -SearchQuery 'Subject:"Secret" AND NOT from:"woshub.com"' -DeleteContent

大きな添付ファイルを検索することもできます。

Search-Mailbox -Identity k.peterson -SearchQuery 'hasattachment:true AND Size:>20MB' -DeleteContent

または、特定のファイル名が添付されたメール:

Search-Mailbox -Identity k.peterson -SearchQuery 'attachment:"annual_report2021.pdf"' -DeleteContent

日付ですか?地域によってフォーマットが異なるため、注意が必要です。通常は「sent:02/22/2022」で問題ありませんが、エラーに注意してください。日付のフォーマットを間違えると、Search-Mailboxがエラーを起こします。日付範囲を検索するには、以下の手順を実行してください。

Search-Mailbox -Identity k.peterson -SearchQuery '{Received:01/04/2022..02/20/2022}' -DeleteContent

新しいバージョンでの新しいコンプライアンスコマンドへの切り替え

そのため、Microsoft は、 Exchange 2016/2019 および Microsoft 365 でより優れた、よりスケーラブルな検索を実現するために、 New-ComplianceSearchNew-ComplianceSearchActionを推進しようとしています。これにより、検索が 10, 000 項目の上限に達することがなくなり、パフォーマンスが向上します。

Connect-IPPSSession

送信者、日付範囲、キーワードなどのパラメータを設定します。

$sender = "[email protected]" ; $start = "02/20/2022" ; $end = "02/22/2022" ; $subject = "report2022"

検索を作成します:

New-ComplianceSearch -Name "ContentSearch_Report2022" -ExchangeLocation all -ContentMatchQuery "sent>=$($start) AND sent<=$($end) AND sender:$($sender) AND subject:$($subject)"

エラーに注意してください。「コマンドレットが認識されません」のようなエラーが表示された場合は、ロールの権限とセッション接続を確認してください。場合によっては、セッションを再起動して再接続する必要があります(Get-PSSession | Remove-PSSession)。

Start-ComplianceSearch -Identity "ContentSearch_Report2022"

完了したら、次の方法で進捗状況を確認します。

Get-ComplianceSearch -Identity "ContentSearch_Report2022" | FL name, items, size, jobprogress, status

プレビュー モードで結果を表示するには:

New-ComplianceSearchAction -SearchName "ContentSearch_Report2022" -Preview

すべてが問題なく、メールを削除する場合は、次のコマンドを実行します。

New-ComplianceSearchAction -SearchName "ContentSearch_Report2022" -Purge -PurgeType SoftDelete

-PurgeType HardDelete一方通行の旅行をしたい場合に使用します。その後の回復はできません。

完了したら、検索オブジェクトをクリーンアップします。

Remove-ComplianceSearch -Identity "ContentSearch_Report2022"

まとめ

メッセージのクリーンアップ、特に大規模な場合のクリーンアップは決して楽しいものではありませんが、適切な権限とコマンドを使えば可能です。ただし、すべての手順を必ず確認し、焦ってはいけません。残しておくべきメールを誤って削除してしまうよりも、二重チェックをする方が賢明です。大規模な組織を扱っている場合や、悪名高い10, 000件の制限を回避したい場合は、新しいコンプライアンスツールに切り替えるのが効果的です。Microsoftは当然ながら、物事を複雑にせざるを得ないからです。

まとめ

  • 開始する前に役割を確認してください。権限は重要です。
  • 簡単な作業に使用しますSearch-Mailboxが、制限に注意してください。
  • 削除する前に必ず結果を見積もってください。
  • より大規模または複雑なタスクの場合は、新しいコンプライアンス検索コマンドを試してください。
  • 最初にテストし、後で削除します。安全第一です。

最後に

これらのコツが、数時間のフラストレーションを解消し、メールのトラブルが制御不能に陥るのを防げることを願っています。ある設定では見事にうまくいきましたが、別の設定では何度かやり直す必要があるかもしれません。完璧は保証できませんが、少なくともこれで、優れたツールとオプションを手に入れたことになります。