Retention Policies und Tags
Die Retention-Funktion von Exchange erlaubt nicht nur die Vorgabe von Mindesthaltezeiten sondern kann auch Mails automatisiert löschen. Die Konfiguration von Richtlinien zu Compliance und Archiv-Gründen sollten Sie nur mit einer genauen Anforderungsaufnahme und Umsetzungsplanung angehen. Wenn Sie aber nur ein Funktionspostfach regelmäßig von Altlasten bereinigen wollen, dann ist ein gutes Beispiel die Funktion kennen zu lernen.
Eigentlich sollte die Seite nur beschreiben, Wie ich Postfächer von alten Inhalten befreie. Das dies bei mir auf Anhieb nicht geklappt hat, wurde die Seite immer länger, weil ich meine Lernkurve bei der Fehlersuche hier beschreibe. Vielleicht teile ich die Seite später einmal auf.
Lesen Sie zum grundlegenden Verständnis über MRM vorab bitte die Seite MRM Message Records Management oder "Messaging records management in Exchange Server" (https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/mrm) und "Retention tags and retention policies in Exchange Server" (https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies)
Auslöser
In meinem Fall ist es ein Postfach, welches automatisierte Mails bekommt, die aber nur eine bestimmte Zeit relevant sind. Wenn ich z.B. PowerShell-Skripte automatisiert laufen lasse, dann protokollieren diese mehr oder minder umfangreich ihre Aktivitäten mit Start-Transcript in Daten und schreiben Fehler ins Eventlog. Aber wie oft schauen Sie selbst auf ihrem Server nach diesen Skripten oder suchen im Eventlog nach den wenigen Meldungen?. Da ist eine Mail an eine SharedMailbox ein legitimer Weg über den Start, das Ende und etwaige Fehler eines Skripts zu informieren. Als Administrator kann ich dann direkt in Outlook bei Rückfragen mit den Status anschauen.
Wenn es aber keine Probleme gibt, dann denke ich auch nicht immer daran, die Mails in diesem "Report Postfach" anzuschauen und zu löschen. Daher habe ich einen Weg gesucht, wie ich automatisiert Mails nach einem gewissen Alter in diesem Postfach löschen kann.
Sie finden sicher noch weitere Anwendungsfälle, z.B. sehe ich oft, dass Mail an "info@<firmenname>" in der Anfangszeit in einem Postfach landen aber sehr bald dann von einer ERP/CRM-Lösung per POP/IMAP ausgelesen aber nicht gelöscht werden. Auch hier kann die Einstellung von Retention Policies die erwünschte Bereinigung automatisch durchführen.
Es soll aber auch Fälle geben, in denen eine Mail nicht länger als unbedingt erforderlich aufbewahrt werden soll. Das hat dann weniger etwas mit Platzbedarf und Kosten sondern mit juristischen Aufgabenstellungen zu tun. Sie sind in Deutschland meines Wissens dazu verpflichtet, steuerrelevante Unterlagen 10 Jahre aufzubewahren. Danach dürfen Sie diese Wegwerfen aber müssen dies natürlich nicht. Aber vielleicht sollen oder wollen Sie dies dennoch sicherstellen, denn wenn in einem Streitfall ein Prüfer auch ältere Unterlagen findet, dann darf er sich auch mit einbeziehen.
Es soll ja besondere Richtlinien im Automobilsektor geben, um "verräterische Mails" (Stichwort Dieselskandal) so früh wie erlaubt zu löschen. Das ist aber nur hörensagen.
Es gibt also verschiedene Anforderungen und so habe ich das in meinem Labor einmal durchgespielt:
Ausgangssituation
Ich habe mein bekanntes "PowerShell Report Postfach" genommen, in dem seit Jahren die Berichte einlaufen und damit entsprechend "voll" ist. Hier möchte ich alle Mails löschen, die älter als 30 Tage sind. Hier haben sich im Laufe der Zeit einige Gigabyte angesammelt
[PS] C:\temp>Get-MailboxStatistics psreport | fl *size* ItemCount : 143383 TotalDeletedItemSize : 587.3 MB (615,862,887 bytes) TotalItemSize : 7.79 GB (8,364,221,673 bytes) MessageTableTotalSize : 1.826 GB (1,960,181,760 bytes) MessageTableAvailableSize : 70.38 MB (73,793,536 bytes) AttachmentTableTotalSize : 15.73 GB (16,892,592,128 bytes) AttachmentTableAvailableSize : 7.563 MB (7,929,856 bytes) OtherTablesTotalSize : 98.28 MB (103,055,360 bytes) OtherTablesAvailableSize : 2.656 MB (2,785,280 bytes) SystemMessageSize : 0 B (0 bytes) SystemMessageSizeWarningQuota : 21.56 GB (23,149,873,725 bytes) SystemMessageSizeShutoffQuota : 22 GB (23,622,320,128 bytes)
Ich wollte mich aber auch nicht mehr mit Outlook, OWA, EWS o.ä. per Skript mit dem Postfach verbinden und alte Mails löschen. Diese Aufwand würde ich nun Exchange überlassen
Die Konfiguration der Retention erfolgt einem klaren Muster:
- Ein Postfach hat genau eine Retention Policy
- Eine Retention Policy fasst ein oder mehrere Retention Tags zusammen
- Ein RetentionTags definiert ein Verhalten pro Postfach, Standardordner oder zur persönlichen Konfiguration
Mein Postfach hatte noch gar keine zugewiesene Retention Policy und daher bin ich Rückwärts gelaufen.
Sie können alle drei folgenden Einstellungen über das Exchange Admin Center durchführen.
Retentiontag anlegen
Im Bereich "Compliance" addiere ich zuerst das gewünschte "Aufbewahrungstag":
In meinem Fall möchte ich die Mails nach 30 Tagen löschen:
Den neuen Eintrag speichere ich. In der PowerShell sieht er wie folgt aus:
[PS] C:\>Get-RetentionPolicyTag "MailboxDeleteTag" | fl MessageClassDisplayName : All Mailbox Content MessageClass : * Description : Managed Content Settings RetentionEnabled : True RetentionAction : PermanentlyDelete AgeLimitForRetention : 30.00:00:00 TriggerForRetention : WhenDelivered MessageFormatForJournaling : UseTnef JournalingEnabled : False AddressForJournaling : LabelForJournaling : Type : All IsDefaultAutoGroupPolicyTag : False IsDefaultModeratedRecipientsPolicyTag : False SystemTag : False LocalizedRetentionPolicyTagName : {} Name : MailboxDeleteTag DistinguishedName : CN=MailboxDeleteTg,CN=Retention Policy Tag Container,CN=ExOrg,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=msxfaq,DC=net Identity : MailboxDeleteTag Id : MailboxDeleteTag
Achten Sie darauf, dass "RetentionEnabled = $true" und RetentionEnabled = $True" ist.
The MoveToDeletedItems and MoveToFolder
actions are available, but don't work. These actions are
available for upgrades from messaging records management
(MRM) 1.0 (managed folders) to MRM 2.0 (retention policies).
MRM 2.0 was introduced in Exchange 2010 Service Pack 1
(SP1).
Quelle:
https://learn.microsoft.com/en-us/powershell/module/exchange/new-retentionpolicytag?view=exchange-ps&redirectedfrom=MSDN#-retentionaction
- New-RetentionPolicyTag
https://learn.microsoft.com/en-us/powershell/module/exchange/new-retentionpolicytag?view=exchange-ps&redirectedfrom=MSDN - Retention tags and retention policies in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies - How retention age is calculated in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-age
Retention Policy anlegen
Nun gehe ich den Bereich "Aufbewahrungsrichtlinien" und addiere neben der vorhandenen "Default MDM Policy" eine neue Richtlinie für meine Löschfunktion:
Ich vergebe einen Namen und addiere das kurz vorher angelegte Aufbewahrungstag:
Auch diese Einstellung wird gespeichert und in der PowerShell gibt es keine weiteren Schalter.
[PS] C:\>Get-RetentionPolicy "DeleteMailbox30Day" | fl RetentionId : 02a4f6ef-4e52-4e57-8884-9df7a9a330a9 RetentionPolicyTagLinks : {MailboxDeleteTag} IsDefault : False IsDefaultArbitrationMailbox : False Name : DeleteMailbox30Day DistinguishedName : CN=Delete 90 Day Mailbox,CN=Retention Policies Container,CN=ExOrg,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=msxfaq,DC=net Identity : Delete 90 Day Mailbox Guid : 02a4f6ef-4e52-4e57-8884-9df7a9a330a9 Id : DeleteMailbox30Day
- New-RetentionPolicy
https://learn.microsoft.com/en-us/powershell/module/exchange/new-retentionpolicy - Get-RetentionPolicy
https://learn.microsoft.com/en-us/powershell/module/exchange/get-retentionpolicy - Retention tags and retention
policies in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies
Retention Policy zuweisen
Im dritten Schritt weise ich die neue Aufbewahrungsrichtlinie dem Postfach "PSReport" zu.
Auch hier kontrolliere ich das Postfach, dass die Richtlinie zugewiesen und ELC nicht deaktiviert ist.
[PS] C:\>get-mailbox PSReport | fl retentionpolicy,ElcProcessingDisabled RetentionPolicy : DeleteMailbox30Day ElcProcessingDisabled : False
Nun gilt es etwas Geduld zu haben. Die Eintragungen der Aufbewahrungstags, Aufbewahrungsrichtlinien und die Verbindung zum Postfach landen alle im Active Directory und sind damit in der Regel in wenigen Minuten repliziert. Aber die Anwendung der neuen Einstellungen ist ein Hintergrundprozess.
Default MRM Policy
zum Vergleich dokumentiere ich hier noch einmal die Exchange 2019 Standard MRM Policy, welches einige persönliche Tags vorgibt. Sie gilt für alle Postfächer, die keine abweichende Policy haben.
Exchange Setup creates the retention policy Default MRM Policy. The policy is
applied automatically if you create an archive for the new user and don't
specify a retention policy
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies?#default-retention-policy
Sie legt z.B. auch die Archivierung auf zwei Jahre fest, wenn ihr Postfach auch ein Archivpostfach hat.
Interessant ist das PolicyTag "Recoverable Items 14 days move to archive", welches hier enthalten aber nicht als "Policytag definiert ist.
- Default retention policy
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies?#default-retention-policy - Default Retention Policy in Exchange
Online
https://learn.microsoft.com/en-us/exchange/security-and-compliance/messaging-records-management/default-retention-policy - Bye Bye Exchange Retention Tags –
Willkommen Purview Data Lifecycle – Worauf
Unternehmen nun achten müssen!
https://www.rakoellner.de/2022/09/bye-bye-exchange-retention-tags-willkommen-purview-data-lifecycle-worauf-unternehmen-nun-achten-muessen/
Start-ManagedFolderAssistant
Geduld ist natürlich eine Tugend, die speziell IT-Administratoren nicht haben. Wir wollen immer sofort Ergebnisse sehen. Die Funktion diese Aufbewahrungsrichtlinien auf Elemente in Postfächern zuzuweisen und Löschungen und Archivierungen auszuführen, ist eine Aufgabe des Exchange Mailbox Assistant Service (MSExchangeMailboxAssistants), der als eigene Dienst auf jedem Exchange Server vorhanden ist.
Bei Exchange 2007/2010 (Siehe MRM Message Records Management) gab es noch einen Zeitplan, über den Sie die Aktivität steuern konnten. Mittlerweile läuft der Assistent rund um die Uhr und passt seine Aktivität an die Systemauslastung an. In Exchange Online gibt es diesen Prozess natürlich auch.
Wenn Sie Exchange einen Hinweis geben möchten, dass Sie bei einem Postfach die Retention Policy oder Retention Tags geändert haben und er bitte möglichst schnell das Postfach bearbeiten soll, dann können Sie dies per PowerShell anstoßen.
Start-ManagedFolderAssistant <MailboxID>
- Start-ManagedFolderAssistant
https://learn.microsoft.com/de-de/powershell/module/exchange/start-managedfolderassistant?view=exchange-ps
Wer die Dokumentation zu "Start-ManagedFolderAssistant" liest, findet einige weitere Parameter, die meine Aufmerksamkeit auf sich gezogen habe.
-AggMailboxCleanup
The AggMailboxCleanup switch specifies a more aggressive
processing cycle if items aren't moving as quickly as they
should. You don't need to specify a value with this switch
Quelle:
https://learn.microsoft.com/en-us/powershell/module/exchange/start-managedfolderassistant?view=exchange-ps#-aggmailboxcleanup
Sollte man damit den Agenten anweisen können, etwas mehr zügiger zu arbeiten? Ich kann den Befehl ausführen aber auf den ersten Blick ist erst einmal kein Unterschied zu erkennen.
Start-ManagedFolderAssistant <MailboxID> -AggMailboxCleanup
Das Commandlet kommt genauso schnell wieder zurück und ich konnte keine Veränderung am AD-Objekt oder sonst wo direkt erkennen. Eine direkte Kommunikation zum Dienst ist auch nicht zu erkennen, zumal, es auch keinen Fehler gibt, wenn die Dienste "MSExchangeMailboxAssistants" oder "MSExchangeServiceHost" gestoppt sind. Dort hätte ich den Hintergrunddienst verortet.
Vermutlich setzt das Commandlet auch nur einen Marker im Postfach selbst
Erwarten Sie aber nicht, dass der Exchange Mailbox Assistant nun sofort losstürmt.
Ich habe leider noch keine weitere Analysen anstellen können, wie das Commandlet mit dem Server spricht und wo man Einblick in die Warteschlange nehmen könnte. Es wird zumindest kein Flag am AD-Objekt gesetzt.
- Start-ManagedFolderAssistant
https://learn.microsoft.com/en-us/powershell/module/exchange/start-managedfolderassistant?view=exchange-ps
https://learn.microsoft.com/de-de/powershell/module/exchange/start-managedfolderassistant?view=exchange-ps - Update Start-ManagedFolderAssistant
documentation for -AggMailboxCleanup
https://github.com/MicrosoftDocs/office-docs-powershell/issues/10733
Status des Postfachs
Wann der Prozess das letzte Mal ein Postfach bearbeitet hat, können Sie per PowerShell etwas umständlich auslesen. Am Beispiel "PSREPORT" liefert mit der Befehl folgende Ausgabe:
([xml]((Export-MailboxDiagnosticLogs ` -Identity psreport ` -ExtendedProperties ` ).MailboxLog ` ) ` ).properties.MailboxTable.Property ` | where {$_.name -like "Elc*"} Name Value ---- ----- ElcLastRunTotalProcessingTime 8390 ElcLastRunSubAssistantProcessingTime 6505 ElcLastRunUpdatedFolderCount 8 ElcLastRunTaggedFolderCount 0 ElcLastRunUpdatedItemCount 0 ElcLastRunTaggedWithArchiveItemCount 0 ElcLastRunTaggedWithExpiryItemCount 0 ElcLastRunDeletedFromRootItemCount 1999 ElcLastRunDeletedFromDumpsterItemCount 0 ElcLastRunArchivedFromRootItemCount 0 ElcLastRunArchivedFromDumpsterItemCount 0 ELCLastSuccessTimestamp 11/21/2023 2:48:58 PM ElcFaiSaveStatus SaveSucceeded ElcFaiDeleteStatus DeleteNotAttempted
- Export-MailboxDiagnosticLogs
https://learn.microsoft.com/de-de/powershell/module/exchange/export-mailboxdiagnosticlogs?view=exchange-ps - Behind the scenes with the Managed
Folder Assistant
https://www.itprotoday.com/email-and-calendaring/behind-scenes-managed-folder-assistant
Beschreibt die Felder
Interessanterweise hat ein "Start-ManagedFolderAssistant <MailboxID>" sehr schnell zu einem Update von "ELCLastSuccessTimestamp" geführt.
Die Ermittlung dieser Wert ist natürlich alles andere als intuitiv, Wie sie am PowerShell-Kommando schon sehen können
- Mit "Export-MailboxDiagnosticLogs -ExtendedProperties" bekommen Sie ein
Objekt
Ich vermute, dass hier das Kommando einfach ein verstecktes Objekte aus dem Postfach lädt, in welches die Exchange Dienste protokollieren. Das kennen wir ja auch schon beim MoveRequest. - Das Property "Mailboxlog" enthält mehr Details als XML-Information
Allerdings gibt es sonst nicht viel weitere interessante Properties. - Casting/Parsen als XML-Objekt
Interessant ist der XML-Knoten "properties.MailboxTable.Property" - Das Ergebnis ist ein Array mit jeweils einem Objekt mit den Namen "Name" und
"Value"
Es ist also keine Hashtable oder Objekt zum direkten Zugriffe
in ein XML-Objekt überführen, damit
Damit finden wir zumindest, ob und wann der Assistent das letzte Mal das Postfach bearbeitet hat.
Nicht immer schafft es Exchange, alle
Postfächer innerhalb von 24h abzuarbeiten.
Der Archiv-Prozess überspringt pauschal alle Postfächer,
deren Postfachgröße unter 10 Megabyte liegt.
Postfächer mit InPlaceHold werden ebenfalls ignoriert. (Get-OrganizationConfig
| Select-Object -ExpandProperty InPlaceHolds)
Elemente in Postfächern mit Retention Hold werden nicht
gelöscht
Elemente in Postfächern mit InplaceHold oder Litigation Hold
werden gelöscht aber in "Recoverable Items" gehalten
In Exchange Online können bis zu 7 Tage vergehen, ehe der Prozess ein Postfach verarbeitet
- How retention age is calculated in Exchange Server
https://learn.microsoft.com/en-s/exchange/policy-and-compliance/mrm/retention-age?view=exchserver-2019
Es gibt von Microsoft sogar ein Tool zur Analyse der MRM-Konfigurationen.
Get-MRMDetails.ps1
https://microsoft.github.io/CSS-Exchange/Retention/Get-MRMDetails/
https://github.com/microsoft/CSS-Exchange/releases/latest/download/Get-MRMDetails.ps1
Postfachstatistik
Mit den ausreichenden Berechtigungen können Sie natürlich auch per Exchange PowerShell zumindest die Statistiken zum Postfach und dessen Ordner anzeigen. Dazu ist einmal die Postfachgröße und Elementanzahl interessant:
PS] C:\>Get-MailboxStatistics -Identity psreport | fl displayname,MailboxTypeDetail,totalitemsize,itemcount DisplayName : PowerShellReport MailboxTypeDetail : SharedrMailbox TotalItemSize : 5,369 GB (5,765,454,422 bytes) ItemCount : 428321
- Get-MailboxStatistics
https://learn.microsoft.com/en-us/powershell/module/exchange/get-mailboxstatistics?view=exchange-ps
Noch detaillierter ist natürlich der Blick mit "Get-MailboxFolderStatistics".
PS] C:\>Get-MailboxFolderStatistics PSReport -IncludeOldestAndNewestItems | ft identity,Foldertype,ItemsInFolder,Foldersize,OldestItemReceivedDate Identity FolderType ItemsInFolder FolderSize OldestItemReceivedDate -------- ---------- ------------- ---------- ---------------------- PSReport\Oberste Ebene des Informationsspeichers Root 0 0 B (0 bytes) PSReport\Aufgaben Tasks 0 0 B (0 bytes) PSReport\Aufgezeichnete Unterhaltungen User Created 0 0 B (0 bytes) PSReport\Conversation Action Settings ConversationActions 0 0 B (0 bytes) PSReport\Dateien Files 0 0 B (0 bytes) PSReport\Entwürfe Drafts 0 0 B (0 bytes) PSReport\ExternalContacts ExternalContacts 0 0 B (0 bytes) PSReport\Gelöschte Elemente DeletedItems 11 32.68 KB (33,462 bytes) 02.02.2023 17:23:48 PSReport\Gesendete Elemente SentItems 0 0 B (0 bytes) PSReport\Journal Journal 0 0 B (0 bytes) PSReport\Junk-E-Mail JunkEmail 0 0 B (0 bytes) PSReport\Kalender Calendar 2 5.798 KB (5,937 bytes) PSReport\Kontakte Contacts 0 0 B (0 bytes) PSReport\Notizen Notes 0 0 B (0 bytes) PSReport\Postausgang Outbox 0 0 B (0 bytes) PSReport\Posteingang Inbox 428270 5.369 GB (5,765,454,422 bytes) PSReport\Working Set WorkingSet 0 0 B (0 bytes) PSReport\Recoverable Items RecoverableItemsRoot 0 0 B (0 bytes) PSReport\Calendar Logging CalendarLogging 0 0 B (0 bytes) PSReport\Deletions RecoverableItemsDeletions 39 697.7 KB (714,441 bytes) 07.06.2013 20:51:00 PSReport\Purges RecoverableItemsPurges 0 0 B (0 bytes) PSReport\Versions RecoverableItemsVersions 0 0 B (0 bytes)
Über die Option "-IncludeOldestAndNewestItems" ermittelt die PowerShell auch das älteste Objekt, was natürlich hilfreich ist, wenn Sie eine Richtlinie zum Löschen alter Objekte überprüfen wollen
- Get-MailboxFolderStatistics
https://learn.microsoft.com/en-us/powershell/module/exchange/get-mailboxfolderstatistics?view=exchange-ps
Export-MailboxDiagnosticLogs
Ich war relativ sicher dass ich alles richtig eingestellt habe aber dennoch wurden die Mails im Postfach nicht bereinigt. Über das Commandlet "Export-MailboxDiagnosticLogs" kann man mit dem richtigen Parameter weitere Details entlocken:
[PS] C:\>Export-MailboxDiagnosticLogs PSReport -ComponentName MRM MailboxLog : 11/24/2023 7:27:57 PM Exception: Microsoft.Exchange.WorkloadManagement.ResourceUnhealthyException: Resource 'DiskLatency(Guid:900c3b74-fae4-431c-9f77-3dfd70087bac Name:DB01 Volume:\\?\Volume{2af56ad6-057d-4dd5-a180-b3155306d3cc}\)' is unhealthy and shouldn't be accessed. at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.ELCHealthMonitor.InternalThrottleStoreCall(List`1 archiveResourceDependencies) at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.DumpsterExpirationEnforcer.ProcessFolderContent s(Folder folder, DefaultFolderType folderTypeToCollect, ItemQueryType itemQueryType, AgeLimitAndAction ageLimitAndAction) at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.DumpsterExpirationEnforcer.ProcessFolderType(De faultFolderType defaultFolderType, AgeLimitAndAction ageLimitAndAction) at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.DumpsterExpirationEnforcer.CollectItemsToExpire() at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.SysCleanupEnforcerBase.CollectItemsWithGuard() at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.SysCleanupEnforcerBase.InvokeInternal() at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.SysCleanupEnforcerBase.Invoke() at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.SysCleanupEnforcerManager.Invoke(MailboxDataForTags mailboxDataForTags, ElcParameters parameters) at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.SysCleanupSubAssistant.Invoke(MailboxSession mailboxSession, MailboxDataForTags mailboxDataForTags, ElcParameters parameters) at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.ELCAssistant.InvokeCore(MailboxSession mailboxSession, List`1 customDataToLog, StatisticsLogEntry logEntry, ElcParameters parameters) at Microsoft.Exchange.MailboxAssistants.Assistants.ELC.ELCAssistant.<>c__DisplayClass30_0.<InvokeInter nalAssistant>b__0() at Microsoft.Exchange.Common.IL.ILUtil.DoTryFilterCatch(Action tryDelegate, Func`2 filterDelegate, Action`1 catchDelegate) LogName : MRM Identity : msxfaq.net/Users/PSReport IsValid : True ObjectState : Unchanged
Und hier ist gut zu sehen, dass im Moment wohl die Festplatte DB01 zu langsam ist (Disklatency) und daher der MRM nicht aktiv wird. Da heißt es warten oder den MRM zu einer anderen Zeit noch einmal starten wenn die Datenbank nicht gerade z.B. eine Datensicherung oder größere MoveRequests zu bedienen hat.
Hinweis:
Das Protokoll enthält immer die letzten Fehler. Wenn es
keine neuen Fehler gibt, wird das Log aber nicht gelöscht.
Prüfen Sie daher das Datum, ob die Meldungen noch zutreffend
sind.
Wenn Sie absichtlich einen falschen Wert bei "ComponentName" angeben, dann liefert die Exchange 2016 PowerShell in der Fehlermeldung auch die möglichen gültigen Komponenten für weitere Details.
[PS] C:\>Export-MailboxDiagnosticLogs PSReport -ComponentName invalid Logs for component 'MR2' weren't found in mailbox 'PSReport'. Available logs: 'MRM, ClearCalendar, OOFRules, InternalCalendarSharingMigration, BirthdayAssistant, RemindersAssistant, CalendarPermissions, OOF, SharingSyncAssistant,HoldTracking'
MRM ClearCalendar OOFRules, InternalCalendarSharingMigration BirthdayAssistant RemindersAssistant CalendarPermissions OOF SharingSyncAssistant HoldTracking
In Exchange Online gibt es noch andere Komponenten:
- Check the MRM diagnostic logs
https://learn.microsoft.com/en-us/microsoft-365/troubleshoot/retention/troubleshoot-mrm-email-archive-deletion#check-the-mrm-diagnostic-logs - Export-MailboxDiagnosticLogs
https://learn.microsoft.com/de-de/powershell/module/exchange/export-mailboxdiagnosticlogs?view=exchange-ps - Advanced troubleshooting calendar items
https://ingogegenwarth.wordpress.com/2017/11/20/advanced-cal/ - Component values
https://github.com/MicrosoftDocs/office-docs-powershell/issues/9277
Fehleranalyse OnPremises Dateien
Wenn Sie ihre Server selbst betreiben, dann wird es nun etwas kniffliger. Wenn Sie nur genau einen Server haben, dann haben Sie schon einmal einen Ansatzpunkt im Eventlog oder ggfls. Tracing. Bei mehreren Servern stellt sich zuerst die Frage, welcher Server denn die Funktion für eine Postfach ausführt. Zuerst hat mich folgender Eventlogeintrag auf das Exchange Logging im Dateisystem hingewiesen.
Log Name: Microsoft-Exchange-MailboxAssistants/Operational Source: Microsoft-Exchange-MailboxAssistants Event ID: 2 Task Category: Discovery Operation Level: Information User: SYSTEM Description: End assistants loader for process MSExchangeMailboxAssistants, provider search path C:\Program Files\Microsoft\Exchange Server\V15\Bin, log path C:\Program Files\Microsoft\Exchange Server\V15\Logging.
Dort landen schon sehr viele CSV-Dateien Hier ein Auszug mit dem Header und das Feld "CustomData" habe ich umgebrochen.
#Software: Microsoft Exchange #Version: 15.0.0.0 #Log-type: ELC Mailbox Assistants Log #<Date: 2023-10-26T12:05:36.103Z #Fields: Timestamp,ServerName,Location,AssistantName,ActivityId,TargetObject,Event,CustomData 2023-10-26T12:05:36.103Z,EX2019,DB01,ElcAssistant,,b9d300de-6890-4692-a1f4-5b66014b4d2e,EndProcessingMailbox, "S:SLADays=0.999936766349537;S:SLAStatus=True;S:ProcessingStartTime=2023-10-26T12:05:36; S:ProcessingEndTime=2023-10-26T12:05:36;S:OrganizationName=;S:ExternalDirectoryOrganizationId=; S:MailboxGuid=b9d300de-6890-4692-a1f4-5b66014b4d2e;S:LastSuccessDate=2023-10-25T12:05:41; S:RecipientTypeDetails=1;S:IsArchive=False;S:IsArchiveOverWarningQuota=False; S:IsArchiveMailboxFull=False;S:IsArchiveDumpsterFull=False;S:IsOnDemandJob=False; S:IsFullCrawlNeeded=False;S:WasComplianceTagHoldApplied=False;S:WasPersonalDeleteTagApplied=False; S:WasPersonalArchiveTagApplied=False;S:IsGroupMailbox=False;S:IsLitigationHoldEnabled=False; S:IsInPlaceHoldEnabled=False;S:IDHA=False;S:DHRP=0;S:IsAuditEnabled=False;S:TotalProcessingTime=78; S:TagSubAssistantProcessingTime=2;S:FolderSubAssistantProcessingTime=0; S:CleanupSubAssistantProcessingTime=59;S:TagProvisionerProcessingTime=0; S:TagEnforcerProcessingTime=0;S:DumpsterExpirationEnforcerProcessingTime=9; S:CalendarLogExpirationEnforcerProcessingTime=1;S:AuditExpirationEnforcerProcessingTime=6; S:DumpsterQuotaEnforcerProcessingTime=0;S:DiscoveryHoldEnforcerProcessingTime=0; S:SupplementExpirationEnforcerProcessingTime=13;S:EHAHiddenFolderCleanupEnforcerProcessingTime=0; S:MigrateToArchiveEnforcerProcessingTime=0;S:EHAMigratedMessageMoveEnforcerProcessingTime=0; S:EHAMigratedMessageDeletionEnforcerProcessingTime=0;S:HoldCleanupEnforcerProcessingTime=0; S:AggMailboxCleanupEnforcerProcessingTime=0;S:NumberOfFoldersUpdated=0; S:NumberOfFoldersTaggedByPersonalArchiveTag=0;S:NumberOfFoldersTaggedByPersonalExpiryTag=0; S:NumberOfFoldersTaggedBySystemExpiryTag=0;S:NumberOfFoldersTaggedByUncertaionExpiryTag=0; S:NumberOfItemsUpdated=0;S:NumberOfItemsTaggedByPersonalArchiveTag=0; S:NumberOfItemsTaggedByPersonalExpiryTag=0;S:NumberOfItemsTaggedByDefaultExpiryTag=0; S:NumberOfItemsTaggedBySystemExpiryTag=0;S:NumberOfItemsTaggedByUncertaionExpiryTag=0; S:NumberOfItemsDeletedByPersonalTag=0;S:NumberOfItemsDeletedByDefaultTag=0; S:NumberOfItemsDeletedBySystemTag=0;S:NumberOfItemsActuallyDeletedByTag=0; S:NumberOfItemsArchivedByPersonalTag=0;S:NumberOfItemsArchivedByDefaultTag=0; S:NumberOfItemsActuallyArchivedByTag=0;S:NumberOfItemsDeletedByDumpsterExpirationEnforcer=0; S:NumberOfItemsActuallyDeletedByDumpsterExpirationEnforcer=0; S:NumberOfItemsArchivedByDumpsterExpirationEnforcer=0; S:NumberOfItemsActuallyArchivedByDumpsterExpirationEnforcer=0; S:NumberOfItemsMovedToPurgesByDumpsterExpirationEnforcer=0; S:NumberOfItemsActuallyMovedToPurgesByDumpsterExpirationEnforcer=0; S:NumberOfItemsDeletedByAuditExpirationEnforcer=0;S:NumberOfItemsDeletedByCalendarLogExpirationEnforcer=0; S:NumberOfItemsDeletedByDumpsterQuotaEnforcer=0;S:NumberOfItemsActuallyDeletedByDumpsterQuotaEnforcer=0; S:NumberOfItemsDeletedBySupplementExpirationEnforcer=0;S:NumberOfItemsDeletedByDiscoveryHoldEnforcer=0; S:NumberOfItemsActuallyDeletedByDiscoveryHoldEnforcer=0;S:NumberOfItemsMovedByMigrateToArchiveEnforcer=0; S:NumberOfMigratedItemsDeletedDueToMigrationExpiryDate=0;S:NumberOfMigratedItemsMovedDueToMigrationExpiryDate=0; S:NumberOfItemsInDiscoveryHoldFolderBeforeProcessing=0;S:SizeOfDeletionByDiscoveryHoldEnforcer=0; S:DiscoveryHoldFolderSizeBeforeProcessing=0;S:EhaMigrationMessageCount=0; S:NumberOfItemsDeletedFromInboxByEHAHiddenFolderCleanupEnforcer=0; S:NumberOfItemsDeletedFromSentByEHAHiddenFolderCleanupEnforcer=0; S:NumberOfItemsDeterminedDuplicateByHoldCleanupEnforcer=0; S:SizeOfItemsDeterminedDuplicateByHoldCleanupEnforcer=0; S:NumberOfItemsAnalyzedByHoldCleanupEnforcer=0; S:NumberOfItemsSkippedByHoldCleanupEnforcer=0; S:NumberOfBatchesFailedToExpireInExpirationExecutor=0; S:NumberOfBatchesFailedToMoveInArchiveProcessor=0; S:NumberOfItemsSkippedDueToSizeRestrictionInArchiveProcessor=0; S:ExceptionType=;S:LogExceptionType=;S:RetryCount=1;S:FRA=False;S:ESR=Completed;S:DeletionAgeLimit=28.00:00:00; S:LastProcessedEnforcer=SignalFolderExpirationEnforcer;S:MoveToArchiveLimitReached=False; S:FailedToLoadUnifiedPolicies=;S:FailedToLoadHoldCacheEntries=;S:FailedToLoadComplianceServiceHoldCacheEntries=; S:NumberOfHoldCacheEntriesRetrieved=0;S:NumberOfHoldCacheEntriesUpdated=0;S:NumberOfHoldCacheEntriesDeleted=0; S:HoldCacheValidationStatus=;S:IHCSCF=False;S:AdminAuditRecordAgeLimit=; S:MailboxAuditRecordAgeLimit=;S:OldestExpiringAuditLog=1/1/0001 12:00:00 AM;S:IsAdminAuditLog=False; S:ArchiveProcessor=;S:IsInactiveMailbox=False;S:FaiSaveStatus=SaveNotAttempted;S:FaiDeleteStatus=DeleteNotAttempted; S:IsDiscoveryHoldQueryCacheRefreshed=False;S:DiscoveryHoldQueryCacheRefreshIntervalInMinutes=240; S:StaleHoldEntryFound=False;S:StaleComplianceServiceHoldEntryFound=False;S:IsAzureHoldCache=False; S:IsComplianceServiceHoldCache=False;S:NumberOfGhostedFolderProcessed=0;S:NumberOfGhostedFolderEmptied=0; S:NumberOfGhostedDumpsterFolderEmptied=0;S:NumberOfGhostedFolderItemsDeleted=0; S:NumberOfGhostedFolderUntagged=0;S:NumberOfGhostedFolderItemsUntagged=0;S:NumberOfInvalidGhostedFolder=0; S:GhostedFolderRetentionPeriodInDays=60;S:IsHierarchySyncTriggered=False;S:FolderSplitThreshold=; S:IsFolderSplitTriggered=False;S:StartingStateOfFolderSplit=; S:FolderSplitTargetMailboxGuid=00000000-0000-0000-0000-000000000000; S:NumberOfFoldersMoved=0;S:SizeOfFoldersMoved=;S:ConvertToLargeArchive=False; S:MailboxType=Primary;S:NumberOfAuxMailboxes=0;S:NumberOfItemsMovedFromDefaultDumpsterFolders=0; S:DisplayNameOfFolderSplited=;S:NumberOfFoldersSplitedOut=0;S:NumberOfDumpsterFoldersSplitedOut=0; S:NumberOfItemsMovedInSingleFolderSplit=0;S:IsLastSplitCompleted=False; S:IgnoreDeletedItemsTag=False;S:IsCloudArchive=False;S:HasPolicy=False; S:HasCustomPolicy=False;S:PolicyName=;S:HasDefaultDeleteAllTag=False;S:DefaultDeleteAllTagPeriod=0; S:HasDefaultDeleteVMTag=False;S:DefaultDeleteVMTagPeriod=0; S:HasDefaultDeleteSkypeTag=False;S:DefaultDeleteSkypeTagPeriod=0;S:HasPersonalDeleteTag=False; S:HasPersonalArchiveTag=False;S:HasCustomSystemTag=False; S:NumberOfItemsDeletedByDefaultDeletedItemsTag=0;S:NumberOfEmptyRetentionIdFound=0; S:NumberOfEmptyRetentionIdFixed=0; S:IncreasedDumpsterQuota=False;S:LastSecureFolderProcessed=; S:NumberOfALItemsPastRetention=0;S:NumberOfALItemsExpiredByRetention=0;S:NumberOfALItemsOverMaxLimit=0; S:NumberOfALItemsOverSafeLimit=0;S:NumberOfALItemsExpiredByFolderShapeLimits=0; S:NumberOfALItemsDeletedBySDFExpirationEnforcer=0; S:NumberOfExpiredItemsTagUpdated=0;S:ALItemCountBeforeProcessing=0; S:ALFolderSizeBeforeProcessing=0;S:ALFolderSizeAfterProcessing=0;S:ALFolderRetentionExitCode=; S:ALFolderShapeLimitExitCode=;S:SDFExpirationEnforcerProcessingTime=0; S:NumberOfCMItemsPastRetention=0;S:NumberOfCMItemsExpiredByRetention=0; S:NumberOfCMItemsOverMaxLimit=0;S:NumberOfCMItemsOverSafeLimit=0; S:NumberOfCMItemsExpiredByFolderShapeLimits=0;S:NumberOfCMItemsDeletedBySDFExpirationEnforcer=0; S:CMItemCountBeforeProcessing=0;S:CHFolderSizeBeforeProcessing=0; S:CHFolderSizeAfterProcessing=0;S:CHFolderRetentionExitCode=;S:CHFolderShapeLimitExitCode=; S:NumberOfSNItemsPastRetention=0;S:NumberOfSNItemsExpiredByRetention=0; S:NumberOfSNItemsOverMaxLimit=0;S:NumberOfSNItemsOverSafeLimit=0; S:NumberOfSNItemsExpiredByFolderShapeLimits=0;S:NumberOfSNItemsDeletedBySDFExpirationEnforcer=0; S:SNItemCountBeforeProcessing=0;S:SNFolderSizeBeforeProcessing=0; S:SNFolderSizeAfterProcessing=0;S:SNFolderRetentionExitCode=; S:SNFolderShapeLimitExitCode=;S:NumberOfPaceItemsPastRetention=0; S:NumberOfPaceItemsExpiredByRetention=0;S:NumberOfPaceItemsOverMaxLimit=0; S:NumberOfPaceItemsOverSafeLimit=0;S:NumberOfPaceItemsExpiredByFolderShapeLimits=0; S:NumberOfPaceItemsDeletedBySDFExpirationEnforcer=0;S:PaceItemCountBeforeProcessing=0; S:PaceFolderSizeBeforeProcessing=0;S:PaceFolderSizeAfterProcessing=0; S:PaceFolderRetentionExitCode=;S:PaceFolderShapeLimitExitCode=; S:NumberOfDelveNotificationsPastRetention=0;S:NumberOfDelveNotificationsExpiredByRetention=0; S:NumberOfDelveNotificationsOverMaxLimit=0;S:NumberOfDelveNotificationsOverSafeLimit=0; S:NumberOfDelveNotificationsExpiredByFolderShapeLimits=0; S:NumberOfDelveNotificationsDeletedBySDFExpirationEnforcer=0; S:DelveNotificationItemCountBeforeProcessing=0;S:DelveNotificationFolderSizeBeforeProcessing=0; S:DelveNotificationFolderSizeAfterProcessing=0;S:DelveNotificationFolderRetentionExitCode=; S:DelveNotificationFolderShapeLimitExitCode=;S:NumberOfGraphDraftsPastRetention=0; S:NumberOfGraphDraftsExpiredByRetention=0;S:NumberOfGraphDraftsOverMaxLimit=0; S:NumberOfGraphDraftsOverSafeLimit=0;S:NumberOfGraphDraftsExpiredByFolderShapeLimits=0; S:NumberOfItemsDeletedByGraphDraftsExpirationEnforcer=0; S:GraphDraftsCountBeforeProcessing=0;S:GraphDraftsFolderSizeBeforeProcessing=0; S:GraphDraftsFolderSizeAfterProcessing=0;S:GraphDraftsFolderRetentionExitCode=; S:GraphDraftsFolderShapeLimitExitCode=;S:NumberOfGraphTransactionsPastRetention=0; S:NumberOfGraphTransactionsExpiredByRetention=0;S:NumberOfGraphTransactionsOverMaxLimit=0; S:NumberOfGraphTransactionsOverSafeLimit=0;S:NumberOfGraphTransactionsExpiredByFolderShapeLimits=0; S:NumberOfItemsDeletedByGraphTransactionsExpirationEnforcer=0;S:GraphTransactionsCountBeforeProcessing=0; S:GraphTransactionsFolderSizeBeforeProcessing=0;S:GraphTransactionsFolderSizeAfterProcessing=0; S:GraphTransactionsFolderRetentionExitCode=;S:GraphTransactionsFolderShapeLimitExitCode=; S:NumberOfAggMailboxDelOperationsRetrieved=Total:0,DeleteMessage:0,DeleteConv:0,DeleteGroup:0,DeleteMessageByCapacity:0; S:NumberOfAggMailboxDelOperationsCompleted=0;S:NumberOfAggMailboxDelOperationsPartiallyDone=0; S:NumberOfAggMailboxDelOperationsWithSoftFailure=0; S:NumberOfAggMailboxDelOperationsWithPermFailure=0;S:NumberOfAggMailboxDelItemsCollected=0; S:AggMailboxDelItemsErrors=;S:NumberOfItemsDeletedByDefaultFolderHistoryExpirationEnforcer=0; S:DefaultFolderHistoryExpirationEnforcerProcessingTime=10; S:MergeRequestIdentity=;S:MergeRequestTargetMailbox=00000000-0000-0000-0000-000000000000; S:MergeRequestStatus=; S:MergeRequestFolders=;S:ExistingMergeRequestIdentity=; S:ExistingMergeRequestStatus=;S:TotalNonIpmSize=0; S:TotalDumpsterSize=0;S:TotalGhostedFolderSize=0;S:AuxToMainArchiveTotalSizeRatio=0;S:ExistingMoveFailedExType=; S:ExistingMoveFailedExMessage=;S:NumberOfItemsDeletedByODataSyncStateExpirationEnforcer=0; S:ODataSyncStateExpirationEnforcerProcessingTime=0; S:QT=;S:QBTPPT=0;S:QBTIT=0;S:EBTIP=0;S:EBTIF=0;S:EBTPT=0; S:REE=0;S:REEPT=0;S:PurgedItemCountInReviewMbx=0; S:DiscHoldItemCountInReviewMbx=0;S:HardDeletedItemCountInReviewMbx=0; S:SRExpirationEnforcerProcessingTime=0; S:NITBMONIF=0;S:NIAMONIF=0;S:MTABIC=0;S:SUT=;S:SUTPPT=0;S:SIU=0; S:HPM=False;S:SDHP=False;S:LVH=;S:NOVH=0;S:CQL=0;S:EEIC=0;S:EEIS=0;S:EX="
Die Mailbox ist im Feld "TargetObject" für die ExchangeGUID zu erkennen. Ich habe daher auf die Mailbox "PSReport" wie folgt gefiltert und konnte gut sehen, dass der Zugriff ca. alle 24h erfolgt.
$mbguid = (get-mailbox psreport).ExchangeGUID.GUID Get-Item -path "C:\Program Files\Microsoft\Exchange Server\V15\Logging\MailboxAssistantsLog\ELCMailboxAssistants*.LOG" ` | %{import-csv ` -Path $_.fullname ` -Header Timestamp,ServerName,Location,AssistantName,ActivityId,TargetObject,Event,CustomData` } ` | ?{$_.targetobject -eq $mbguid}` | ft timestamp Timestamp --------- 2023-10-27T15:17:41.790Z 2023-10-28T15:17:39.706Z 2023-10-29T15:17:38.808Z 2023-10-30T15:19:30.120Z 2023-10-31T15:19:30.031Z 2023-11-01T15:13:49.852Z 2023-11-02T15:13:46.241Z 2023-11-03T15:19:24.647Z 2023-11-04T15:13:47.334Z 2023-11-05T15:19:23.330Z 2023-11-06T15:19:22.995Z 2023-11-07T15:27:50.006Z 2023-11-08T15:29:29.340Z 2023-11-09T15:29:23.656Z 2023-11-10T15:29:25.509Z ....
Ich habe auch nur auf dem Server eine Ausgabe erhalten, auf der die Datenbank auch aktiv ist.
Ich würde daher davon ausgehen, dass für ein Postfach immer der Server zuständig ist, auf dem die Datenbank gemountet ist.
In Exchange Online sind bis zu 7 Tage möglich:
In Exchange Online, the Managed Folder Assistant (MFA) is set to process
mailboxes at least one time every seven days. Although MFA usually processes
mailboxes every day, the process can take up to seven days to finish. Instead of
waiting for the process to run, you can force it by running the Start-ManagedFolderAssistant
https://learn.microsoft.com/en-us/microsoft-365/troubleshoot/retention/troubleshoot-mrm-email-archive-deletion
Eine weitere Auswertung des Logs nach "Location" hat auch immer nur die Datenbanken gezeigt, die zu dem Zeitpunkt auf dem gemountet sind. Im Feld "AssistantName" ist immer nur "ElcAssistant" erschienen und bei Event stand immer nur "EndProcessingMailbox".
Dafür habe ich ein anderes Log gefunden, welches zumindest den Start und das Ende eines Laufs anzeigt und erkennen lässt, ob es ein "geplanter" oder ein "onDemand"-Aufruf war
C:\Program Files\Microsoft\Exchange Server\V15\Logging\MailboxAssistantsSlaReportLog\ElcAssistant*.LOG
Der Inhalt ist wieder im klassischen LogFormat und zur Lesbarkeit habe ich die Zeile nach jedem Feld umgebrochen
#Software: Microsoft Exchange #Version: 15.0.0.0 #Log-type: MailboxAssistantsSlaReportLog #Date: 2023-11-25T18:00:36.604Z #Fields: Timestamp,ServerName,AssistantName,Database,JobId,RequestType,MailboxGuid,Event,Reason,ExceptionType,InnerExceptionType,WorkcycleMinutes,AssistantCategory 2023-11-25T19:53:27.422Z, EX2019, ElcAssistant, DB01, 2023-11-25T19:53:23.8885174Z, OnDemand, 52089554-00cc-4007-b74f-3f4e370dc465, StartProcessingMailbox, ,,,1440,Session
Wir können nach dem Zeittempel den Servernamen und den Prozess "ElcAssistant" samt Datenbank erkennen. Das "OnDemand" ist eine direkte Folge meines "Start-ManagedFolderAssistant"
Weitere Verzeichniss liefern primäre Informationen, wenn der Assistent eine neue Datenbank gefunden hat etc.
C:\Program Files\Microsoft\Exchange Server\V15\Logging\Assistants C:\Program Files\Microsoft\Exchange Server\V15\Logging\Assistants\Submission C:\Program Files\Microsoft\Exchange Server\V15\Logging\Assistants\AssistantsService C:\Program Files\Microsoft\Exchange Server\V15\Logging\ItemAssistants C:\Program Files\Microsoft\Exchange Server\V15\Logging\MailboxAssistantsSlaReportLog
Fehleranalyse OnPremises Eventlog
Ein weiterer Eventlogeintrag liefert Informationen, welche "Assistenten", d.h. Module der Mailbox Assistent denn integriert hat.
Log Name: Microsoft-Exchange-MailboxAssistants/Operational Source: Microsoft-Exchange-MailboxAssistants Date: 11/29/2017 3:07:33 PM Event ID: 7 Task Category: Discovery Operation Level: Information Keywords: User: SYSTEM Description: An assistant discovered: Provider:be55f3a9-2966-4591-a68c-7c0c61b2c3e3 Assistant:ProvisioningAssistant Identity:b4262426-a19c-463f-896f-d84059ee1881 Type:EventBased Enabled:True
Ich musste natürlich mehrere Events auslesen, bis ich eine Liste ermittelt habe.
Get-WinEvent -LogName "Microsoft-Exchange-MailboxAssistants/Operational" ` | where {$_.id -eq 7} ` | % { ([xml]$_.toxml()).event.userdata.eventxml} ` | ft Assistant,Type,Enabled -autosize Assistant Type Enabled --------- ---- ------- XrmProvisioningTimeBasedAssistant TimeBased True FreeBusyPublishingAssistant EventBased True OnlineMeetingDetectionAssistant EventBased True ClearCalendarAssistant EventBased True BirthdayAssistant EventBased True CalendarInteropAssistant EventBased True RecipientDLExpansionEventBasedAssistant EventBased True RemindersAssistant EventBased True PushNotificationAssistant EventBased True DarTaskStoreEventBasedAssistant EventBased True DiscoverySearchEventBasedAssistant EventBased True SharingFolderAssistant EventBased True CalendarNotificationAssistant EventBased True ProvisioningAssistant EventBased True UMPartnerMessageAssistant EventBased True MessageWaitingIndicatorAssistant EventBased True ElcEventBasedAssistant EventBased True UserActivityAssistant EventBased True ConversationsAssistant EventBased True ApprovalAssistant EventBased True JunkEmailOptionsAssistant EventBased True ResourceBookingAssistant EventBased True GriffinEventBasedAssistant EventBased True TimeProfileAssistant EventBased True CalendarAssistant EventBased True XrmProvisioningTimeBasedAssistant TimeBased True XrmActivityStreamMaintenanceAssistant TimeBased True XrmAutoTaggingMaintenanceAssistant TimeBased True ActivitySharingTimeBasedAssistant TimeBased True WeveMessageAssistant TimeBased True UserGroupsRelevanceAssistant TimeBased True UMReportingAssistant TimeBased True TimeProfileTimeBasedAssistant TimeBased True SuggestedUserGroupAssociationsAssistant TimeBased True UserInformationTableMaintenanceAssis... TimeBased True StoreUrgentMaintenanceAssistant TimeBased True StoreScheduledIntegrityCheckAssistant TimeBased True StoreMaintenanceAssistant TimeBased True StoreOnlineIntegrityCheckAssistant TimeBased True StoreDSMaintenanceAssistant TimeBased True StoreCustomerExpectationMaintenanceA... TimeBased True SkypeContactCleanUpAssistant TimeBased True SiteMailboxAssistant TimeBased True SharingPolicyAssistant TimeBased True SharingMigrationTimeBasedAssistant TimeBased True SharePointSignalStoreAssistant TimeBased True SearchIndexRepairTimebasedAssistant TimeBased True ResourceUsageLoggingAssistant TimeBased True ReminderSettingsAssistant TimeBased True ShardRelevancyTimeBasedAssistant TimeBased True ShardRelevancyMultiStepTimeBasedAssi... TimeBased True PublicFolderHierarchySyncAssistant TimeBased True PublicFolderAssistant TimeBased True AddressListIndexAssistant TimeBased True PeopleRelevanceAssistant TimeBased True PeopleInsightsTimeBasedAssistant TimeBased True PicwAssistant TimeBased True PeopleCentricTriageAssistant TimeBased True OABGeneratorAssistant TimeBased True MailboxLifecycleAssistant TimeBased True MailboxProcessorAssistant TimeBased True MailboxDataExportAssistant TimeBased True MailboxAssociationReplicationAssistant TimeBased True JunkEmailOptionsCommitterAssistant TimeBased True CalculatedValueTimeBasedAssistant TimeBased True HashtagsRelevanceAssistant TimeBased True GroupMailboxAssistant TimeBased True GroupCalendarSubscriptionAssistant TimeBased True GriffinTimeBasedAssistant TimeBased True GriffinLightweightTimeBasedAssistant TimeBased True GoLocalAssistant TimeBased True FileExtractionTimeBasedAssistant TimeBased True ElcAssistant TimeBased True DynamicAttachmentTimeBasedAssistant TimeBased True DirectoryProcessorAssistant TimeBased True DefaultViewIndexAssistant TimeBased True DarTaskStoreTimeBasedAssistant TimeBased True ContentSubmissionAssistant TimeBased True ConferenceRoomUsageAssistant TimeBased True ComplianceJobAssistant TimeBased True CleanupActionsAssistant TimeBased True CalendarSyncAssistant TimeBased True CalendarRepairAssistant TimeBased True ComposeGroupSuggestionTimeBasedAssis... TimeBased True BigFunnelRetryFeederTimeBasedAssistant TimeBased True BigFunnelMetricsCollectionAssistant TimeBased True CalendarInsightsAssistant TimeBased True ContactCleanUpAssistant TimeBased True
Das sind jede Menge Aufgaben, die der Mailbox Assistant ausführen kann.
Vermutlich kann man dem Mailbox Assistant noch mehr Informationen entlocken, wenn ich den "Get-EventLogLevel" hochschraube.
[PS] C:\>Get-EventLogLevel MSExchangeMailboxAssistants\* Identity EventLevel -------- ---------- MSExchangeMailboxAssistants\Service Lowest MSExchangeMailboxAssistants\Discovery Lowest
Das habe ich bislang aber nicht weiter untersucht, da ich während der Arbeit an dem Artikel das Problem mit "Export-MailboxDiagnosticLogs -component MRM" auf eine zu langsam Festplatte zurückführen konnte.
- Get-EventLogLevel
https://learn.microsoft.com/de-de/powershell/module/exchange/get-eventloglevel?view=exchange-ps - Set-EventLogLevel
https://learn.microsoft.com/de-de/powershell/module/exchange/set-eventloglevel?view=exchange-ps - Configure and run the Managed Folder Assistant in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/configure-managed-folder-assistant?view=exchserver-2019
Start-MailboxAssistant
Neben dem Commandlet "Start-ManagedFolderAssistant" gibt es auch noch "Start-MailboxAssistant", um dem System etwas auf die Beine zu helfen.
Die Unterschiede habe ich noch nicht genau herausgearbeitet. Ich vermute, dass Start-MailboxAssistant einfach alle Aktionen auf einer Mailbox ausführt, während "Start-ManagedFolderAssistant" sich auf einen Teilbereich beschränkt.
Hier ist mit in einer gemischten Umgebung mit Exchange 2016/2019 ein vermutlich temporäres Fehlverhalten aufgefallen. In einer Exchange 2016 PowerShell konnte ich den Befehl nicht aufrufen, Wenn das Postfach auf einem Exchange 2019 CU13 SU4 Server lag. Der Fehler zeigt gut, dass die PowerShell den Befehl als Proxy per RPS (Remote Powershell) an den Zielserver weiterreichen wollte und der folgende Fehler aufgetreten ist.
[PS] C:\>Start-MailboxAssistant PSREport -AssistantName MRM Error on Start-MailboxAssistant -AssistantName:'MRM' -Identity:'PSReport'' to server EX01.msxfaq.net: Server version 15.02.1258.0000, Proxy method RPS:
Auch ein direkter Aufruf mit einer Exchange 2019 PowerShell wird mit einem Fehler quittiert:
Error 0x80040202 (Unknown error (0x80040202)) from StartWithParams + CategoryInfo : NotSpecified: (:) [Start-MailboxAssistant], RpcException
Dazu passt ein Hinweis aus dem folgenden KB-Artikel, der aber schon das vorherige CU12 als "Lösung" beschreibt.
- KB5012758 Start-MailboxAssistant is not available in Exchange Server 2019
(KB5012758)
https://support.microsoft.com/en-gb/topic/start-mailboxassistant-is-not-available-in-exchange-server-2019-kb5012758-7f0d18f6-9b75-41df-bdf8-24b3280fc631
Die dort beschriebene Abhilfe funktioniert auch in meinem Fall. Ich starte auf dem Exchange 2019 Server eine normale PowerShell und binde mir die Exchange Admin Tools direkt lokal ein:
# Einbinden der lokalen Exchange Management Tools Add-PSSnapin Microsoft.Exchange.Management.Powershell.E2010 # Antriggern Start-MailboxAssistant PSREport -AssistantName MRM
Der Befehl kommt sehr schnell zurück und es ist auch mit einem "-verbose" nicht sichtbar, war er tatsächlich tut. Insofern kann ich nicht sehen, wo er ein "Flag" hinterlässt und ob dieses vom Hintergrundprozess dann auch wieder gelöscht wurde.
- KB5012758 Start-MailboxAssistant is not available in Exchange Server 2019
(KB5012758)
https://support.microsoft.com/en-gb/topic/start-mailboxassistant-is-not-available-in-exchange-server-2019-kb5012758-7f0d18f6-9b75-41df-bdf8-24b3280fc631
MRM in Exchange Online
Auch in Exchange Online gib es einen Troubleshooter, der z.B. die Archiv-Funktion für ein Postfach analysiert.
-
https://aka.ms/PillarArchiveMailbox
https://admin.microsoft.com/AdminPortal/?searchSolutions=Diag:%20Archive%20Mailbox#/homepage
Schade, dass es für Exchange OnPremises nicht auch solche Assistenten gibt. Ich denke aber, dass auch die Assistenten im Hintergrund ebenfalls die Konfiguration prüfen und Analog zu "MailboxDiagnosticLogs" die Ergebnisse auswerten. Denn in der Cloud wird es sehr viele Server geben, die die MRM-Funktion umsetzen.
Hinweis: Microsoft verlagert die Compliance-Funktionen alle in das Purview-Portal.
Das bedeutet, dass Sie einige Dinge zukünftig besser in Purview einstellen und anderen weitere über MRM
To proactively retain or delete mailbox content for information governance in
Microsoft 365, we recommend that you use retention policies and retention labels
from the Microsoft Purview compliance portal, instead of messaging records
management that's described on this page. However, you should continue using
messaging records management to move messages to archive mailboxes.
Quelle:
https://learn.microsoft.com/en-us/purview/retention
- Purview Learn about retention policies
and retention labels
https://learn.microsoft.com/en-us/purview/retention - How long it takes for retention settings
to apply
https://learn.microsoft.com/en-us/purview/retention?tabs=table-overriden#how-long-it-takes-for-retention-settings-to-apply - Default Retention Policy in Exchange
Online
https://learn.microsoft.com/en-us/exchange/security-and-compliance/messaging-records-management/default-retention-policy - Bye Bye Exchange Retention Tags –
Willkommen Purview Data Lifecycle – Worauf
Unternehmen nun achten müssen!
https://www.rakoellner.de/2022/09/bye-bye-exchange-retention-tags-willkommen-purview-data-lifecycle-worauf-unternehmen-nun-achten-muessen/ - How to Transition from Exchange Online
Mailbox Retention Policies to Microsoft 365
Retention
https://practical365.com/transition-exchange-retention-microsoft365/ - Deleting Mailboxes with Retention Policies
https://www.insentragroup.com/gb/insights/geek-speak/migrations/deleting-mailboxes-with-retention-policies/
Postfach geleert?
Nach alldem Text bleibt natürlich die spannende Frage: Hat es denn funktioniert und wurden die Mails gelöscht? Ja, auch wenn ich weit und breit kein Protokoll (mehr) gefunden habe, indem die Löschvorgänge im Detail protokolliert wurden, waren alle Mails älter als 30 Tage im Postfach gelöscht. In dem Fall ist es mir nur nicht sofort aufgefallen, da es ein sehr "beschäftigtes" Postfach ist, in welches mehrere tausend Mails pro Tag laufen sind und das Postfach schon immer durch die oberen Quota-Grenze blockiert war, was dann natürlich wieder NDRs an den Absender (das Postfach selbst) generiert hat. Erst der Blick mit Get-MailboxFolderStatistics und Auswertung der ältesten Mail hat den Erfolg gezeigt.
Ja, ich gestehen, dass ein volles Postfach als Ziel für Statusmeldungen von PowerShell-Skripten vielleicht nicht die beste Wahl ist
Das Problem konnte ich durch die Richtlinie nun soweit lösen, dass die alten Mails bereinigt werden, neue Mails wieder zugestellt werden und das Postfach zukünftig die Festplatten nicht vollschreibt. Zudem habe ich wieder viel über die interne Funktionsweise von Exchange OnPremises und den "Exchange Mailbox Assistent" gelernt.
Weitere Links
- MRM Message Records Management
-
Messaging records management in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/mrm -
Retention tags and retention policies in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies -
How retention age is calculated in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-age -
Purview Learn about retention policies and retention labels
https://learn.microsoft.com/en-us/purview/retention - Create a retention policy in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/create-retention-policies?view=exchserver-2019 - Start-MailboxAssistant
https://learn.microsoft.com/en-us/powershell/module/exchange/start-mailboxassistant?view=exchange-ps - Export-MailboxDiagnosticLogs
https://learn.microsoft.com/de-de/powershell/module/exchange/export-mailboxdiagnosticlogs?view=exchange-ps - KB5012758 Start-MailboxAssistant ist in Exchange Server 2019 nicht verfügbar
https://support.microsoft.com/de-de/topic/start-mailboxassistant-ist-in-exchange-server-2019-nicht-verf%C3%BCgbar-kb5012758-7f0d18f6-9b75-41df-bdf8-24b3280fc631 - KB5007044 Start-MailboxAssistant in EMS in Exchange Server 2019 nicht
verfügbar
https://support.microsoft.com/de-de/topic/start-mailboxassistant-in-ems-in-exchange-server-2019-nicht-verf%C3%BCgbar-kb5007044-457d58c1-13b6-450a-9cce-e1cef4e87fbc - Office 365: Start-ManagedFolderAssistant in Office 365
https://timmcmic.wordpress.com/2018/02/07/office-365-start-managedfolderassistant-in-office-365/ - How to Track the Processing Done by Exchange Online’s Managed Folder
Assistant
https://office365itpros.com/2018/12/10/reporting-the-managed-folder-assistant/ - How retention age is calculated in Exchange Server
https://learn.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-age?view=exchserver-2019 - Start Managed Folder Assistant for a single mailbox
https://exchangepedia.com/2008/11/start-managed-folder-assistant-for-a-single-mailbox.html - Troubleshooting Retention Policies in Exchange Online (Part 1)
https://www.linkedin.com/pulse/troubleshooting-retention-policies-exchange-online-part-1-nassar/ - Retention Tags and Retention Policies in
Exchange Online
https://www.reddit.com/r/LivingWithServers/comments/x7w0mx/retention_tags_and_retention_policies_in_exchange/ - Reviewing the Exchange Mailbox Diagnostics Log
https://www.undocumented-features.com/2021/02/03/reviewing-the-exchange-mailbox-diagnostics-log/
https://www.powershellgallery.com/packages/Get-ManagedFolderAssistantReport/1.0 - Retention Tags - expired items not
deleted from Deleted Items
https://social.technet.microsoft.com/Forums/ie/en-US/56260407-4b15-407e-9079-2a97c79abf0c/retention-tags-expired-items-not-deleted-from-deleted-items?forum=exchange2010