Tools: GalComp

Diese Skript hat mit dem Verschwinden von Exchange 5.5 keine Funktion mehr

Wenn Sie die Empfänger zwischen Exchange On-Premises und Exchange Online vergleichen wollen, dann ist das Skript Compare-GAL interessanter

Alle Skripte sind Muster ohne jede Gewährleistung oder Funktionsgarantie. Für Schäden bin ich nicht verantwortlich. Achten Sie auf Zeilenumbrüche bei der Übernahme.

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanziieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

Bei der Migration von Exchange 5.5 nach 2000/2003 innerhalb der gleichen Organisation ist die Einrichtung des Active Directory Connector der erste Schritt, um die beiden Verzeichnisse abzugleichen. Allerdings müssen Sie dazu einige ADC CAs einrichten. GalComp vergleicht einfach die globale Adressliste der Exchange 5.5. Umgebung mit den Einträgen im Active Directory. Sie erhalten schon vor der Installation des ersten Exchange 2000/2003 Servers einen Überblick, welche Objekte nicht überein stimmen. Zudem könne Sie auch während des gemischten Betriebs immer wieder prüfen, ob ihre ADC-Konfiguration vollständig ist und korrekt funktioniert.

GalComp ist ein Hilfsprogramm um zwei globale Adressbücher zu vergleichen. Bei einer Migration und Koexistenz von Exchange 5.5 und Exchange 2000/2003 ist der Abgleich der globalen Adressliste zwischen den beiden Welten besonders wichtig. Diese Aufgabe übernimmt normalerweise der Active Directory Connector. Wenn alles korrekt läuft, dann ist die globale Adressliste von Exchange 5.5 identisch mit der globalen Adressliste, welche das Active Directory bereitstellt, identisch.

Ist diese Liste jedoch nicht identisch, dann kann das z.B. eine Replikationsinkonsistenz sein aber ebenso ein Konfigurationsfehler oder Probleme mit der Replikation durch den ADC. Die Aufgabe dieses Scripts ist daher die GAL von zwei Systemen zu lesen, zu vergleichen und die unterschiede zu melden.

GalComp vergleich nur die GAL aber muss aufgrund von Systembeschränkungen natürlich Abstriche machen:
Es gibt Fälle, die nicht erfolgreich "gefunden" werden können und Objekte, die in der GAL identisch sind, aber einzelne Felder (z.B.: Telefonnummer) nicht übereinstimmen.
GalComp vergleich nicht die einzelnen Feldinhalte, weil es dazu zu jedem Exchange 5.5 Server eine direkte Verbindung aufbauen müsste, was in vielen Exchange 5.5 Umgebungen nicht möglich ist und eine hohe Last verursacht.
GalComp ist kein Ersatz für eine Kontrolle des ADC (z.B. CheckADC), sondern ein Hilfsmittel zur mengenmäßigen Betrachtung der Einträge in der GAL.
GalComp erkennt nicht, wenn einmal replizierte Objekte in der Folge nicht mehr repliziert werden, z.B.: weil das dazugehörige CA gelöscht wurde oder nicht mehr läuft.

Funktionsweise

Der Vergleich der GAL beruht auf der Funktion des ADCs, welcher die Objekte zwischen den beiden Verzeichnisdiensten abgleicht und entsprechende Metadaten im Feld ADCGlobalNames hinterlegt. Das Script verbindet sich dazu per LDAP mit den beiden Verzeichnisdiensten und liest entsprechende Informationen aus, die dann gegeneinander abgeglichen werden. Hier ein generelles Flussdiagramm der Funktion.

Die Objekte werden in einem Dictionary-Objekt gespeichert und verglichen. Unstimmigkeiten werden in eine XML-Datei zur weiteren Auswertung ausgegeben. Bei Bedarf kann das Skript erweitert werden, dass es auch ausgewählte Feldinhalte von zusammengehörenden Objekten vergleicht. Dies ist aktuell aber noch nicht ausgearbeitet.

Die Tücken sind im Detail

Das Flussdiagramm sieht so einfach aus, aber dennoch ist der Weg zum Ergebnis etwas steiniger als dies zu erwarten wäre:

  • Kein Matching anhand Displayname möglich, da nicht "eineindeutig"
    Knifflig bei der Aufgabe ist natürlich das "Matching" der Objekte, d.h. die klare Zuordnung der Objekte von beiden Verzeichnissen zueinander. Natürlich ist der "DisplayName" ein gutes Kriterium, da er vom ADC auf beiden Seiten auch gleich gehalten wird. Allerdings kann es schon sein, dass mehrere Objekte den gleichen Displaynamen haben. Gerade bei Problemen mit dem Abgleich ist so etwas oft der Fall. Zudem ist der Displayname kein "eindeutiger Key".
  • ADCGlobalNames in EX55 nicht repliziert
    Der ADC nutzt für das "finden" gleicher Einträge das Feld ADCGlobalNames, welches zwar im Active Directory Bestandteil des globalen Katalogs ist, aber das Gegenst�ck in Exchange 5.5 wird leider nicht im Rahmen des Verzeichnisabgleichs repliziert. Und es kann auch im Active Directory Objekte geben die für Exchange und den ADC relevant sind aber, warum auch immer, eben noch nicht repliziert sind. Insofern ist dieses Feld auch nur ein Baustein des Vergleichs.
  • Verborgene Empfänger und Anmeldenamen
    Allerdings muss das Skript natürlich auch die verborgenen Empfänger im Exchange 5.5 Directory finden und bearbeiten. Im Gegensatz zum AD zeigt Exchange 5.5 diese Daten aber erst, wenn man ein ",cn=admin" an den Anmeldenamen abhängt. Sehr "seltsam"
    Siehe dazu auch 196850 Viewing hidden or deleted Exchange objects via ADSI/LDAP
    Aus den Ergebnissen muss man dann aber immer noch anhand der Fehler "Is-Deleted" oder "Hide-From-Address-Book" herausfinden, wie mit dem Objekt umzugehen ist.
  • Exchange Dienstkonto muss lokale Administrator sein.
    Der Technet Artikel "185475 LDAP search returns no entries für hidden or deleted objects" hat weiter geholfen, warum das Skript immer noch nicht alle Objekte gefunden hat.
  • Klartextkennwort
    Zuletzt war auch das Kennwort für die EX55 Anmeldung ein Stolperstein. Wenn das Kennwort mit der Option: "oConnection.Properties("Encrypt Password") = true" angegeben wurde, dann wurden auch keine versteckten Objekte angegeben. Also auch hier muss oConnection.Properties("Encrypt Password") = false stehen.

Auch dieses Skript ist nicht ganz frei von Problemen, denn es kann theoretisch sein, dass ein Exchange 5.5 Objekt mit seinem DN gar nicht im AD in msExchADCGlobalNames auftaucht. Das Script macht keinen Any to Any -Vergleich aller ADCGlobalNamens-Einträge.

Download und Einsatz

Das Skript benutzt den Windows Script Host, welcher auf dem System installiert sein muss und verbindet sich per LDAP mit einem GC ihrer Domäne und einem Exchange 5.5 Server, welchen Sie angeben müssen.

Das Skript nutze ich bei Kunden während einer Migration. Es ist aktuell nicht "frei" verfügbar, sondern wird von meinen Kollegen und mir bei Projekten oder Supportfällen zur Problemlösung eingesetzt.
Informationen, warum diese Skripte nicht öffentlich sind, finden Sie auf nicht public.

Das Script muss mehrere Parameter können, um zu gestartet werden zu können. Diese Parameter sind im Script selbst und nicht �ber die Kommandozeile anzugeben. Sie werden als Konstanten am Anfang gepflegt:

const conEX55LDAPPath= "LDAP://10.1.1.55:388"
const conEX55User = "cn=Administrator,dc=MSXFAQ,cn=Admin"
const conEX55PASS = "password"

const conADLDAPPath= "GC://10.1.1.55"
const conADUser = "Administrator"
const conADPASS = "password"
const conOutputFiler = "[status!='Matched']" ' XML Filterkriterium'

Nach der Anpassung der Parameter im Script können Sie dieses einfach mit "CSCRIPT" starten.

cscript galcomp.vbs

Die Laufzeit hängt von der Geschwindigkeit ihres Netzwerks, der Server, dem ausführenden PC und zum Großteil von der Anzahl der Objekte ab.

Ausgabe

Die XML-Datei enthält wieder alle Informationen des Exports und Vergleichs und kann z.B. mit dem Internet Explorer und dem ebenfalls angelegten Stylesheet angezeigt werden.

�ber das Filterkriterium im Skript kann das Stylesheet so angepasst werden, dass nur die Objekte ohne ein "Matched" angezeigt werden. In der XML-Datei sind aber immer alle Daten enthalten.

Weiterentwicklung

  • Mehr Vergleichsoptionen und bessere
  • Errorlevel
  • Eventlog
  • Mom

Weitere Links