Zum Inhalt springen
>_marc-oltersdorf.de

Exchange 2019: Mails in allen Postfächern suchen und löschen

Marc Oltersdorf 2 Min. Lesezeit aktualisiert 18.10.2026

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

  1. 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.

  2. 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.

  3. 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-Mailbox steht nur zur Verfügung, wenn das eigene Konto die Rolle „Mailbox Search“ (Rollengruppe Discovery Management) hat; für -DeleteContent ist zusätzlich die Rolle „Mailbox Import Export“ nötig. Fehlt sie, kennt die Shell das Cmdlet oder den Parameter schlicht nicht.
  • Ohne -ResultSize unlimited liefert Get-Mailbox hö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 um subject: 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 -TargetMailbox und -TargetFolder vor 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.

Hat dir das geholfen?

RSS abonnieren

$ ls ../ Passt dazu