Regelmäßige Erkennung und Bereinigung defekter oder inaktiver Postfächer in Exchange mit PowerShell
- Einleitung
- Definition von defekt und inaktiv
- Voraussetzungen
- Erfassung inaktiver Postfächer
- Erkennung defekter Postfächer
- Automatisierte Bereinigung
- Regelmäßige Ausführung mittels Task Scheduler
- Zusammenfassung
Einleitung
In Exchange-Umgebungen können im Laufe der Zeit Postfächer entstehen, die entweder defekt sind oder nicht mehr aktiv genutzt werden. Dies kann zu Speicherplatzverschwendung führen und die Exchange-Leistung beeinträchtigen. Mit PowerShell lässt sich eine automatisierte, regelmäßige Analyse und Bereinigung solcher Postfächer realisieren. Im Folgenden wird erläutert, wie man mit PowerShell defekte oder inaktive Postfächer identifizieren sowie bereinigen kann. Dabei wird sowohl auf die technische Vorgehensweise als auch auf die Planung einer regelmäßigen Ausführung eingegangen.
Definition von defekt und inaktiv
Defekte Postfächer können beispielsweise Postfächer sein, bei denen die Datenbank beschädigt ist oder Probleme beim Zugriff auftreten, die Postfachstatus "Disconnected" oder Soft-Deleted aufweisen. Inaktive Postfächer sind solche, die über einen längeren Zeitraum nicht mehr genutzt wurden, d. h. keine Anmelde- oder Nutzungsaktivität aufweisen. Zur Identifikation werden in der Regel Prüfkriterien wie das Datum der letzten Anmeldung (LastLogonTime), Größe des Postfachs oder das Vorhandensein von Fehlern in der Postfach-Datenbank verwendet.
Voraussetzungen
Für die Umsetzung wird eine Exchange Management Shell-Umgebung benötigt oder zumindest eine PowerShell-Session mit Exchange-Modulen, die Verbindungsaufbau zu einem Exchange-Server oder Exchange Online unterstützt. Entsprechend der Exchange-Version (On-Premises oder Exchange Online) ist die konkrete Herangehensweise leicht unterschiedlich. Dieses Beispiel fokussiert sich auf Exchange On-Premises, das Grundprinzip ist aber ähnlich übertragbar.
Erfassung inaktiver Postfächer
Um inaktive Postfächer zu erfassen, ist es sinnvoll, sich auf das Attribut "LastLogonTime" zu konzentrieren, welches das Datum der letzten Anmeldung oder Nutzung des Postfachs angibt. Mittels des Cmdlets Get-MailboxStatistics können Informationen zum Zeitpunkt der letzten Anmeldung ausgelesen werden. Hierbei empfiehlt es sich, ein Zeitfenster festzulegen, z. B. alle Postfächer, die länger als 90 Tage inaktiv sind. Ein Beispielbefehl wäre:
Get-Mailbox -ResultSize Unlimited | ForEach-Object { $stats = Get-MailboxStatistics $_.Identity if ($stats.LastLogonTime -lt (Get-Date).AddDays(-90)) { $_.PrimarySmtpAddress }}Diese Abfrage liefert alle E-Mail-Adressen der Postfächer, die länger als 90 Tage nicht genutzt wurden. Zusätzlich kann man weitere Filterkriterien wie Postfachgröße, Postfachtyp usw. verwenden.
Erkennung defekter Postfächer
Defekte Postfächer sind schwerer zu erfassen, da kein eindeutiger Status meist vorhanden ist. Helfen kann das Cmdlet Get-MailboxStatistics in Kombination mit Fehlerausgaben bei der Kommunikation oder ungewöhnlichen Attributen. Man kann z. B. Postfächer erfassen, die den Status "Disconnected" haben, über die Cmdlets Get-Mailbox -InactiveMailboxOnly (für deaktivierte Postfächer) oder per geprüftem Zugriff mittels Test-Commandos wie Test-MRSHealth. In Exchange Online gibt es zudem Reports über fehlerhafte Postfächer.
Ein Beispiel für das Auflisten von getrennten (disconnected) Postfächern ist:
Get-MailboxDatabase | Get-MailboxStatistics | Where-Object { $_.DisconnectDate -ne $null }Diese liefert alle Postfächer, die gelöscht, aber noch in der Datenbank vorhanden sind ("Soft-Deleted"), und somit entfernt oder endgültig gelöscht werden können.
Automatisierte Bereinigung
Sobald inaktive oder defekte Postfächer identifiziert sind, kann die Bereinigung über PowerShell weiter automatisiert werden, z. B. durch Setzen eines Skripts, welches Postfächer deaktiviert, löscht oder archiviert. Wichtig ist hier ein Genehmigungsprozess, da die endgültige Entscheidung meist unternehmensweit gefällt werden muss, um Datenverlust zu vermeiden.
Beispielhaft kann ein Outlook-Archivierungsskript auf Basis des letzten Logons erstellt werden oder die Postfächer können in ein Archiv verschoben werden. Löschen geschieht z. B. mit:
Remove-Mailbox -Identity <MailboxIdentity> -PermanentDiese Maßnahme sollte nur nach vorherigen Backups und Genehmigung eingesetzt werden.
Regelmäßige Ausführung mittels Task Scheduler
Um die Erkennung und Bereinigung automatisiert und regelmäßig durchzuführen, empfiehlt sich, ein PowerShell-Skript zu schreiben, welches die oben beschriebenen Prüfungen durchführt und danach Ergebnisse protokolliert und optional Maßnahmen einleitet. Dieses Skript kann über den Windows Aufgabenplaner (Task Scheduler) zu gewünschten Zeitpunkten (z. B. wöchentlich, monatlich) ausgeführt werden.
Wichtig bei der Ausführung sind geeignete Berechtigungen (Exchange-Administrator), sichere Verwaltung von Anmeldedaten (z. B. über gespeicherte Credentials oder Service Accounts) und Logging der Vorgänge, um Nachvollziehbarkeit zu gewährleisten.
Zusammenfassung
Mit Hilfe von PowerShell und Exchange-Cmdlets können defekte oder inaktive Postfächer regelmäßig erkannt und bereinigt werden. Schlüsselbefehle sind Get-Mailbox und Get-MailboxStatistics, um den letzten Zugriff und Status der Postfächer auszuwerten. Zur Identifikation inaktiver Postfächer verwendet man das Attribut LastLogonTime, für defekte Postfächer den Disconnect-Status oder andere Fehlermeldungen. Die Automatisierung erfolgt über Skripte, die in Windows Task Scheduler eingeplant werden. Dabei sind Filter und Genehmigungen für eine sichere und nachvollziehbare Bereinigung essenziell.
Diese Vorgehensweise hilft, den Exchange-Server schlank zu halten, Speicherplatz effizient zu nutzen und die Umwelt der E-Mail-Postfächer aktuell zu halten.