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.