Exchange: Geisterpostfächer endgültig entfernen
Heute bin ich auf ein außergewöhnliches Problem gestoßen: Geisterpostfächer. Doch lasst mich das Problem etwas näher beschreiben. Am Exchange waren Postfächer vorhanden, die im eigentlichen Sinne gar keine funktionstüchtigen Postfächer mehr waren. Das AD-Objekt war nicht mehr vorhanden und sie ließen sich auch nicht mit dem Befehl „Get-Mailbox“ auswerten. Nur über eine Abfrage der Mailbox-Statistiken auf Datenbanklevel brachte sie zum Vorschein. Da ich genau wusste, nach welchen ehemaligen Postfächern ich suchen musste, konnte mir der folgende Befehl bei der Suche helfen.
[PS] C:\Windows\system32>$dbs = Get-MailboxDatabase [PS] C:\Windows\system32>$dbs | foreach{Get-MailboxStatistics -Database $_.Name | where {$_.Displayname -like "*test*"} | select Identity, Displayname, TotalItemSize, Database, Disconnect*} Identity : d7e6d88b-a905-4a6a-bf7d-270b64e734f3 DisplayName : Test User01 TotalItemSize : 4.795 GB (5,148,164,291 bytes) Database : DB14 DisconnectDate : DisconnectReason : Identity : c0265cf0-8935-419a-921c-107095aa908b DisplayName : Test User02 TotalItemSize : 4.04 GB (4,337,656,320 bytes) Database : DB15 DisconnectDate : DisconnectReason : Identity : 9fdeb360-933f-4c5c-be2a-4f20141df548 DisplayName : Test User03 TotalItemSize : 4.713 GB (5,060,934,314 bytes) Database : DB15 DisconnectDate : DisconnectReason : Identity : 277b608e-69e3-49c7-9be8-2e0123cdddb7 DisplayName : Test User04 TotalItemSize : 10.9 GB (11,700,122,189 bytes) Database : DB16 DisconnectDate : DisconnectReason :
Wenn man allerdings nicht genau weiß, wie beispielsweise der Displayname gesetzt war, gibt es keine einfache Möglichkeit, solle Postfächer ausfindig zu machen. Das Problem ist, dass diese auch nicht automatisch vom Exchange nach Ablauf der Retention Policy gelöscht werden, da sie weder einen DisconnectDate noch DisconnectReason besitzen. Das bedeutet, dass sie immer den entsprechenden Speicher in der Datenbank belegen werden, da sie für den Exchange vollwertige Mailboxen sind.
Normalerweise lassen sich getrennte Postfächer mit dem Befehl „Remove-StoreMailbox“ problemlos entfernen und den Datenbankspeicher freigeben. In diesem Fall funktioniert das allerdings nicht, da die Mailbox für den Exchange nicht getrennt war. Daher lief das CMDLET auch in einen Fehler:
[PS] C:\Windows\system32>Remove-StoreMailbox -Identity d7e6d88b-a905-4a6a-bf7d-270b64e734f3 -Database DB13 -MailboxState Softdeleted The mailbox "d7e6d88b-a905-4a6a-bf7d-270b64e734f3" isn’t disconnected + CategoryInfo : NotSpecified: (:) [Remove-StoreMailbox], ManagementObjectNotFoundException + FullyQualifiedErrorId : [Server=EX0401,RequestId=7f221125-935c-4713-9584-5971fd32bf5e,TimeStamp=28.06.2021 12:48:57] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] 95C8F437, Microsoft.Exchange.Management.StoreTasks.RemoveStoreMailbox + PSComputerName : ex0401.test.local
Glücklicherweise verfügt der Befehl „Remove-Mailbox“ über den Parameter „StoreMailboxIdentity“ mit welchem man eigentlich funktionstüchtige Postfächer direkt und unwiederbringlich löscht:
[PS] C:\Windows\system32>Remove-Mailbox -StoreMailboxIdentity d7e6d88b-a905-4a6a-bf7d-270b64e734f3 -Database DB14 Confirm Are you sure you want to perform this action? Removing mailbox "d7e6d88b-a905-4a6a-bf7d-270b64e734f3" on database "DB14". [Y] Yes [A] Yes to All [N] No [L] No to All [?] Help (default is "Y"): y
Somit konnten die Geisterpostfächer entfernt und der Speicherplatz innerhalb der Datenbanken wieder freigegeben werden.