Postfach wöchentlich mit Aufgabe automatisch bereinigen lassen (Exchange 2013/2016)

The estimated reading time 4 minutes

Postfach wöchentlich mit Aufgabe automatisch bereinigen lassen (Exchange 2013/2016)

Immer wieder kommt die Anforderung ein bestimmtes Postfach in einem bestimmten Zyklus zu löschen. Ich habe mich nun damit beschäftigt und hierfür eine Anleitung verfasst bzw. ein Powershell Skript geschrieben welches per Aufgabe (schedule task) ausgeführt werden kann.

Link zum Skript auf Github:

https://github.com/blog-it-koehler-com/mailbox-cleanup.ps1

UPDATE04-07-2019:

es gibt eine neue Version des Skriptes, in der mehrere Benutzer aufgeräumt werden können
https://github.com/blog-it-koehler-com/mailbox-cleanup.ps1/blob/master/mailbox-cleanup0.2.ps1

Vorbereitung:

ich empfehle das Skript als Aufgabe auf dem Exchange Server auszuführen. Hierfür benötigt der Benutzer keine Domänen-Admin Rechte. Das Skript funktioniert auch nicht als Domänen Admin, da dieser per Standard nicht die erforderlichen Rechte hat.

Deshalb erst die Vorbereitungen erledigen!

Ich habe hierfür einen speziellen „deleteuser“ angelegt. Dieser bekommt nun die notwendigen Berechtigungen auf meinem Exchange 2016.
Dazu muss die Exchange Powershell als Administrator geöffnet werden.

Nun folgenden Befehl in die Konsole eingeben:

New-ManagementRoleAssignment -Name ImportExportRole -User "domain\user" -Role 'Mailbox Import Export'

Wobei der Benutzer genommen werden muss der nachher auch das Recht erhalten soll Mails zu löschen (also der Benutzer mit dem das Skript ausgeführt werden soll).

WICHTIG: Benutzername den SamAccountName verwenden!

Wer diesen nicht weiß kann ihn sich mit folgendem Befehl anzeigen lassen (Get-Mailbox | fl name,alias,displayname,samaccountname)

In meinem Fall benutze ich den Benutzer „deleteuser“.

New-ManagementRoleAssignment -Name ImportExportRole -User "demo01\deleteuser" -Role 'Mailbox Import Export'

mailbox-cleanup01

Nun muss der Benutzer noch in der Discovery Management Gruppe sein, da er ansonsten keine Postfächer durchsuchen darf.

Dies kann über Powershell oder über die GUI realisiert werden hier der GUI Weg.

mailbox-cleanup02

Außerdem muss noch das Skript auf dem Server abgelegt werden.

Ich nutze den Dateipfad: C:\Scripts\mailbox-cleanup\mailbox-cleanup-0-1.ps1 .

Das Skript muss noch editiert werden:

mailbox-cleanup03

Es muss der Benutzer angegeben werden, mit dem das Skript ausgeführt wird (in meinem Fall nun der deleteuser ) und der Benutzer welcher das Postfach geleert werden soll (hier test01).

mailbox-cleanup04

Installation des Active Directory Powershell Modules (der Befehl kann auch direkt in der ISE eingegeben werden ).

Add-WindowsFeature RSAT-AD-PowerShell

mailbox-cleanup16

Dieses Modul wird ebenfalls für das Skript benötigt.

Als weitere Vorbereitung muss der „deleteuser“ noch in die lokale Administratoren Gruppe des Exchange Servers, damit es keine Probleme bei der Anmeldung/ Zugriff auf Skript etc. gibt.

mailbox-cleanup17

Als weitere Berechtigung muss der Benutzer Organization Admin sein, da sonst wichtige Teile des Skriptes nicht funktionieren. (falls die Exchange Gruppen nicht sichtbar sind, muss zuerst die erweiterte Ansicht im AD aktiviert werden).

mailbox-cleanup18

Noch eine letzte Vorbereitung in der administrativen Powershell.

Set-ExecutionPolicy Unrestricted -Force

Vorbereitungen abgeschlossen.

Der eigentliche Task kann wie folgt angelegt werden (hierbei verwende ich die Standardpfade, sollten sich diese unterscheiden müssen sie natürlich angepasst werden)

mailbox-cleanup05

mailbox-cleanup06

mailbox-cleanup07

mailbox-cleanup08

mailbox-cleanup09

Als Programm muss hier die Powershell.exe aufgerufen werden , danach die Argumente (Pfad muss eventuell angepasst werden)

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-NonInteractive -WindowStyle Hidden -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; C:\Scripts\mailbox-cleanup\mailbox-cleanup-0-1.ps1

mailbox-cleanup10

Nach dem Anlegen nochmals bearbeiten und den Benutzer als Ausführenden eintragen

Wenn der Benutzer keine Berechtigung hat sich als BatchJob anzumelden, dann erscheint folgende Meldung

mailbox-cleanup12

Um dies zu erledigen muss die Locale Sicherheitsrichtlinie aufgerufen werden

mailbox-cleanup13

mailbox-cleanup14

mailbox-cleanup15

hier ebenfalls den „deleteuser“ hinzufügen

Nun kann der Task gestartet werden.

Outlook vor der Bereinigung (es werden auch Kalendereinträge und sonstige Objekte gelöscht!)

mailbox-cleanup19

Danach

mailbox-cleanup21

Im Skript-Ordner wird dann das Logfile abgelegt

mailbox-cleanup20

Man kann dann sehen wie viel Items gelöscht wurden.

Ich wünsche viel Spaß beim Testen. Bei Fragen einfach schreiben.

Was this article helpful?
YesNo
0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
11 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Ben
Ben
5 Jahre zuvor

Hallo Alex,
schönes Skript und gut beschrieben.
Ich möchte das Skript nutzen um alle Mails die älter als x Tage sind aus allen Postfächern von Usern einer bestimmten AD-Gruppe zu löschen.
Wie man das mit den Tagen macht hast du bereits beschrieben, aber ich vermute das Skript muss größer umgebaut werden, wenn ich das auf mehere User anwenden will, da dann das Logging verändert werden muss, richtig?
Grüße,
Ben

Roland
Roland
Reply to  A.K.
4 Jahre zuvor

Hallo Alex,
aber wollte Ben das nicht so haben, dass er Mail die X Tage alt sind erst löscht?
Ich habe z.B. einige Postfächer da soll immer alles was älter als 30 Tage als ist gelöscht werden.
Hast du dazu noch eine Idee?
Grüße
Roland

Andreas
Andreas
5 Jahre zuvor

Vielen Dank für die Mühe…
Bei mir wird im Log folgendes ausgeworfen

maildeleteuser has Discovery Management permissions
maildeleteuser has Organization Management permissions
Permission for user maildeleteuser Import-Export is missing! Configure your user with the right permissions see command: New-ManagementRoleAssignment -Name ImportExportRole -User domain\user -Role ‚Mailbox Import Export‘, also check if the user is member of the Discovery Management Group in AD

Das ist ja anscheinend endlich mal eine genaue Fehlermeldung mit Anleitung – leider sind aber die Schritte genau befolgt worden und ein erneutes New-ManagementRoleAssignment bringt nur die Fehlermeldung, dass das Objekt bereits vorhanden ist. Mitglied im Discovery Management ist der User auch..

Noch eine Idee?
Danke
Andreas

Alexander
Alexander
6 Jahre zuvor

Hallo,

schonal vielen Dank für das geniale Script. Funktioniert Super.
Gibt es vielleicht auch die Möglichkeit nur E-Mails zu löschen die älter als 30 Tage sind?

Gruß
Alexander

Markus
Markus
Reply to  A.K.
4 Jahre zuvor

Guten Abend,
ist es auch möglich, Email die älter als sind nur aus einem bestimmten Unterordner zu löschen?
Ich habe da immer so ServicePostfächer bei denen die User die Meldungen immer in verschiedene Ordner sortieren und nach 30 Tagen können die dann weg.
Hast du dazu einen Tipp für mich?
Vielen Dank