Exchange 2019: Mails in allen Postfächern suchen und löschen
Mit zwei PowerShell-Befehlen lassen sich alle Postfächer einer Exchange-Organisation nach Mails eines bestimmten Absenders durchsuchen und die Treffer anschließend löschen – praktisch, wenn eine Spam-Mail im ganzen Unternehmen gelandet ist.
$ git log --graph Der Weg zur Lösung
-
Problem
Spam in hunderten Postfächern
Eine Mail ist bereits überall zugestellt; Filter helfen nur für die Zukunft, Handarbeit je Postfach ist unmöglich.
-
Erkenntnis
Search-Mailbox kann schätzen und löschen
Dasselbe Cmdlet durchsucht alle Postfächer per KQL-Abfrage – mit -EstimateResultOnly nur zählen, mit -DeleteContent entfernen.
-
Lösung
Erst zählen, dann löschen
Zwei Befehle in der Exchange Management Shell: die Schätzung zeigt die betroffenen Postfächer, der zweite Lauf räumt auf.
Eine Spam- oder Phishing-Mail ist an hunderte Postfächer im Unternehmen gegangen, und sie soll weg, bevor jemand draufklickt. Postfach für Postfach durchzugehen ist keine Option. Auf einem Exchange 2019 reichen zwei Befehle in der Exchange Management Shell: Mit Search-Mailbox werden alle Postfächer nach Mails eines bestimmten Absenders durchsucht, zuerst nur gezählt, dann gelöscht.
Das Problem
Die Mail ist bereits zugestellt; ein Transportregel oder Spamfilter hilft nur für die Zukunft. Gebraucht wird ein Weg, der über alle Postfächer der Organisation läuft, die Treffer eingrenzt – nach Absender, Betreff oder Zeitraum – und erst nach einer Kontrolle löscht. Genau das kann Search-Mailbox: Es nimmt eine Suchabfrage entgegen und kann die Treffer entweder nur schätzen oder entfernen.
Erst zählen
Das Ergebnis zeigt, in welchen Postfächern wie viele Mails gefunden wurden – noch ohne etwas zu löschen:
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery from:"spam@example.com" -EstimateResultOnly | Select Identity,ResultItemsCount,ResultItemsSize | Where-Object ResultItemsCount -gt 0
Dann löschen
Anschließend kann mit dem folgenden Befehl die Löschung der gefundenen Mails erfolgen:
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery from:"spam@example.com" -DeleteContent
Warum das funktioniert
Get-Mailbox -ResultSize unlimited liefert alle Postfächer der Organisation und reicht sie einzeln an Search-Mailbox weiter. Die Suchabfrage in -SearchQuery verwendet die Abfragesprache KQL, die auch die Suche in Outlook und OWA nutzt: from: grenzt auf den Absender ein, möglich sind ebenso subject:, received: oder Kombinationen mit AND. Mit -EstimateResultOnly wird nur gezählt; das Ergebnis je Postfach steht in ResultItemsCount, und der Filter auf größer null blendet die vielen leeren Postfächer aus. Erst -DeleteContent greift in die Postfächer ein.
Stolperfallen
- Rechte:
Search-Mailboxsteht nur zur Verfügung, wenn das eigene Konto die Rolle „Mailbox Search“ (Rollengruppe Discovery Management) hat; für-DeleteContentist zusätzlich die Rolle „Mailbox Import Export“ nötig. Fehlt sie, kennt die Shell das Cmdlet oder den Parameter schlicht nicht. - Ohne
-ResultSize unlimitedliefertGet-Mailboxhöchstens 1000 Postfächer – in größeren Organisationen bleibt dann ein Teil unberührt, ohne Fehlermeldung. - Zu breite Abfrage:
from:trifft alles von diesem Absender, auch legitime ältere Mails. Bei bekannten Absendern die Abfrage umsubject:oder einen Zeitraum ergänzen und die Schätzung genau ansehen. - Kopie statt nur löschen: Wer die Treffer aufheben will (etwa für die IT-Sicherheit), kann sie mit
-TargetMailboxund-TargetFoldervor dem Löschen in ein Sammelpostfach kopieren. - Laufzeit: Die Suche geht nacheinander durch alle Postfächer; bei vielen Postfächern dauert das entsprechend. Die Shell nicht vorzeitig schließen.