Nach einer Migration von Exchange Server 5.5 auf Exchange Server 2003 mit der Move-Mailbox-Methode tauchen im Ereignisprotokoll des Exchange-2003-Servers oft Unmengen von Warnmeldungen mit der Event-ID 9551 auf. Der Grund: Oft sind in der Exchange-5.5-Umgebung Berechtigungen auf Postfachebene oder auf Öffentliche Ordner für Konten gesetzt, die nicht mehr existieren. Exchange 5.5 nutzt dabei ein eigenes Format, die Berechtigungen zu speichern: Anders als Windows, das für solche Zwecke Security IDs (SIDs) verwendet, nutzt Exchange 5.5 den X.500-Namen des berechtigten Objekts. Im Zuge der Migration versucht Exchange, die „alten“ Objektverweise durch Windows-SIDs zu ersetzen. Dazu nutzt es den Abgleich des Exchange-Verzeichnisses mit Active Directory, der über den Active Directory Connector (ADC) erzeugt wurde.
Wenn nun aber das berechtigte Objekt gar nicht mehr vorhanden ist, kann Exchange auch keine SID-Konvertierung durchführen. Diese Tatsache wird nun für jeden einzelnen Fall mit einem 9551-Event ins Ereignisprotokoll geschrieben. Daraus resultieren eine Reihe von Problemen: Einerseits füllt sich das Ereignisprotokoll sehr schnell, und die wirklich wichtigen Ereignisse gehen unter. Andererseits kann in großen Umgebungen auch die Leistung oder Stabilität des Exchange-Servers stark beeinträchtigt werden.
In der Knowledge Base finden sich vier Lösungsansätze:
- Die empfohlene Methode ist, dem Problem vorzubeugen und schon vor der Migration auf dem Exchange Server 5.5 einen DS/IS-Konsistenzcheck auszuführen. Dieser entfernt die verwaisten Berechtigungen.
- Sobald die Migration begonnen hat, ist es dafür aber zu spät. Als Abhilfe können die Berechtigungen mit Hilfe der Angaben in den Warnmeldungen manuell bereinigt werden. Abgesehen davon, dass das schnell unhandlich wird, ist es im Falle von Mailboxen oft auch nicht durchführbar, denn MAPI-Berechtigungen innerhalb der Mailbox (z.B. auf den Kalender) sind nur innerhalb der Mailbox selbst veränderbar.
- Mit Exchange 2000 SP2 wurde die Funktion „Ignore Zombie Users“ eingeführt. Dabei handelt es sich um einen Registry-Key, der Exchange anweist, die verwaisten Berechtigungen nicht zu beachten. Das löst das Problem allerdings nicht, sondern verbirgt es nur.
- Der beste Ansatz besteht in der „DN Deadlist“: Die X.500-Namen der verwaisten Objekte werden in eine Textdatei eingetragen. In dieser Datei sieht Exchange nach, wenn es vergeblich versucht, einen Berechtigungseintrag zu konvertieren. Steht der Name in der Liste, so entfernt Exchange ihn aus dem Berechtigungseintrag.
Spricht also vieles für Methode 4. Der Nachteil: Es ist ein Riesenaufwand, aus vielleicht hunderten von 9551-Warnmeldungen die Objektnamen herauszulösen und sie in eine Textdatei zu schreiben. Doch wozu gibt es Skriptwerkzeuge?
Mit Log Parser lassen sich die 9551-Einträge gesammelt auslesen und in eine Textdatei schreiben. Diese Textdatei wird dann mit einem kleinen VBScript verarbeitet, um nur die X.500-Namen herauszulösen. Schließlich sorgt ein Batch dafür, dass der Verweis auf die „Deadlist“-Datei in die Registry geschrieben wird. Nun muss nur noch der Information Store neu gestartet werden, und die 9551-Meldungen verschwinden. Damit dieser letzte Vorgang besser geplant werden kann, wird er nicht automatisch ausgeführt.
Die kleine Skriptsammlung gibt es hier zum Download:
9551 Deadlist-Generator (2,5 KiB, 2.604-mal heruntergeladen, letzte Änderung am 28. Januar 2008)
Voraussetzungen:
- Log Parser 2.2 muss auf dem Exchange Server 2003 installiert sein.
- Die Skripts müssen in dem Ordner C:\deadlist liegen. Anderenfalls müssen alle Pfade angepasst werden. Die Deadlist muss in dem Ordner bleiben, bis das Problem behoben ist.
- Wenn die Deadlist abgearbeitet und die Warnungen verschwunden sind, kann der Registry-Eintrag wieder entfernt werden. Erst danach darf auch die Deadlist verschwinden.
- Achtung: Das VBS-Skript ist für englische Systeme gedacht. Damit es auf einem deutschen System funktioniert (und dort die deutschen Fehlermeldungen richtig auswertet), ist Zeile 24 folgendermaßen zu ändern:
Alt: intRechts = InStr(intLinks, strZeile, “ into a Windows“)
Neu: intRechts = InStr(intLinks, strZeile, “ nicht in einen Windows“)
http://faq-o-matic.net/?p=762