MiniSync

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.

Diese Skript ist eine sehr einfache Version eines Inhaltstransfers einer LDAP-Quelle zu einem anderen LDAP-Ziel. Bislang setze ich das Skript bei Kunden ein, wobei es aber mehr oder weniger größeren Anpassungen Bedarf. Daher finden Sie es nicht als Download.

Unterstützung durch Net at Work:
Wenn Sie Daten aus einem LDAP-Verzeichnisse in ein anderes Verzeichnis regelmäßig übertragen wollen, dann können wir sie gerne bei der Lösung unterstützen. Ob dabei dann MiniSync, MIIS oder ein anderes Produkt zum Einsatz kommt, ist erst einmal offen. MiniSync kann aber in kurzer Zeit sehr günstig installiert werden.

MiniSync schreibt direkt per LDAP, was von Microsoft mit Exchange 2007/2010 nicht mehr empfohlen wird. Es funktioniert aber, wenn Sie z.B.: nach jedem Lauf ein Update-Recipient auf die Objekte ausführen.

MiniSync ist meine eigene Lösung, um die Empfänger verschiedener Exchange Organisationen abzugleichen. Das Skript liest die Mailadressen und Empfänger aus der Quelle und importiert diese als Kontakte in das Ziel. Der Prozess erfolgt nur in einer Richtung. Bidirektionale Replikation ist möglich, wenn Sie das Skript eben zweimal einsetzen.

Wichtig ist dabei die Zuordnung der Felder. In der Quelle hat ein Objekt nicht nur einen DisplayName, der im Adressbuch angezeigt wird und einen Mailadresse, sondern auch auch Proxy-Adressen. Zudem haben Kontakte ein Feld "TargetAddress". Je nach Betriebsart müssen die Felder entsprechend umgesetzt werden.

Drei Felder sind dabei entscheidend:

Das Zielobjekt einer Migration ist immer ein Exchange aktivierter Kontakt, da nur der Eintrag im Adressbuch mit einer passenden Mailadresse zählt. Nur welche Felder enthalten welche Informationen bei einem für Exchange aktivierten Objekt ?

Objekt Mailbox Mailuser Mailkontakt Öffentlicher Ordner Verteiler / Abfrageverteiler
Mail Enthält die primäre Adresse Externe Adresse Externe Adresse Enthält die primäre Adresse Enthält die primäre Adresse
TargetAddress leer, ansonsten ist es eine Umleitung SMTP:Externe Adresse SMTP:Externe Adresse nicht vorhanden nicht vorhanden
proxyAddresses Enthält Mail als primäre Adresse

weitere sekundäre Adressen der Organisation

Enthält primäre externe Adresse

Weitere sekundäre Adressen, z.B.: X.400 der Organisation

Enthält primäre externe Adresse

Weitere sekundäre Adressen, z.B.: X.400 der Organisation

Enthält Mail als primäre Adresse

weitere sekundäre Adressen der Organisation

Enthält Mail als primäre Adresse

weitere sekundäre Adressen der Organisation

MailNickName vorhanden vorhanden vorhanden vorhanden vorhanden
mxExchHomeServer DN des Homeserver na na nicht vorhanden nicht vorhanden
HomeMDB gefüllt na na    
HomeMTA gefüllt na na    
2007/2010
msExchRecipientDisplayType
1073741824 6 - - -
2007/2010
msExchRecipientTypeDetails
1 - 64 4096 1024
InternetExcoding na 1310720 1310720    
MDBUseDefault True/False na na    
MSExchangeMailboxGUID Gefüllt na na    
msExchUserAccountControl 0 na na    
msExchMailboxSecurityDescriptor gefüllt na na    
msExchALObjectVersion gefüllt gefüllt gefüllt    
UPN und andere Anmeldefelder gefüllt gefüllt na    
MAPIRecipient True False False    

Diese Informationen sind nun in das Ziel zu übertragen..

Dieses Skript beschränkt sich auf Exchange 2000/2003 im Active Directory. Wenn ein Verzeichnisabgleich mit anderen Verzeichnisdiensten wie z.B.: Notes, OpenLDAP o.ä. erforderlich ist, dann sprechen Sie mich gerne an. Das Prinzip ist ähnlich, nur das andere Felder genutzt werden müssen. Auch im Active Directory können Sie einem Objekt eine Mailadresse geben, ohne dass es gleich Exchange aktiviert ist. Diese Objekte werden ebenfalls ignoriert.

Betriebsarten

Sie haben nun schon gelesen, dass beim Dirsync zwischen zwei Betriebsarten zu unterscheiden ist.

Entsprechend müssen die Felder umgesetzt werden. Dabei ist zu beachten, dass der RUS diese neuen Kontakte ebenfalls bearbeiten wird.

Quelle Einfacher Sync

Die Exchange Organisationen haben eigenständige SMTP-Adressräume

Shared Sync
Displayname Displayname, eventuell um ein Firmensuffix ergänzt Displayname, eventuell um ein Firmensuffix ergänzt
Mail TargetAddress = "SMTP:" & Quelle.Mail
Mail = Quelle.Mail
Die Mailadresse wird aus der exklusiven SMTP-Domäne der ProxyAddresses gewonnen.
ProxyAddresses addieren zu ProxyAddresses = ProxyAddresses
TargetAddress (bei Kontakten und mailaktiven Benutzern) Wird nicht verwendet, da das Feld "Mail" eine gültige Adresse enthalten sollte. Wird nicht verwendet, da das Feld "Mail" eine gültige Adresse enthalten sollte.
Sonstige Felder Nach Bedarf Nach Bedarf

Um Schleifen bei einer bidirektionalen Replikation zu verhindern darf der angelegte Kontakt natürlich nicht mehr in die Quelle zurück repliziert werden. Das ist aber einfach zu verhindern, in dem vor dem Anlegen die Existenz einer entsprechenden Mailadressen geprüft wird.

Einschränken der Adressen

Nun ist es ja ein einfaches, alle Empfänger einer Organisation in einer anderen Organisation als Kontakt anzulegen. Aber vielleicht ist es gar nicht gewollt, dass wirklich alle Empfänger der anderen Seite bekannt gegeben werden sollen. Daher stellt sich die Frage nach Filtermöglichkeiten: Derer gibt es drei, die mit dem Script problemlos umzusetzen sind

Wenn sie mehr Funktionen wünschen, dann sollten Sie vielleicht kommerzielle Tools in Betrachtung ziehen oder selbst entwickeln

Einschränkungen

Das Skript ist absichtlich einfach gehalten. Das bringt aber einige Einschränkungen mit sich:

So funktioniert es

Die Funktion ist in wenigen Schritten erklärt. Das Flussdiagramm ergänzt die Beschreibungen.

Hier das ganze noch mal als vereinfachtes Flussdiagramm:

Um den Aufwand für das Binden des Zielobjekts zu reduzieren, speichert das Skript die höchste verarbeitete USN des vorherigen Laufs im Ziel und vergleicht alle Quellobjekte gegen diese USN. Nur Objekte mit einer höheren USN werden dann weiter verarbeitet.

Die Performance von MiniSync ist natürlich von der Leistung der LDAP-Server, der Netzwerkbandbreite aber vor allem vom dem ausführenden PC abhängig. Aber Raten von 5-15 Objekte/Sekunde sind durchaus realistisch. Es wird aber wird sicher an seine Grenzen stoßen, wenn Sie ähnlich dem ADC alle 5 Minuten die Änderungen übertragen wollen.

Konfiguration

Mehrere Quellen und Ziele bedeutet, dass Sie das Script entsprechend kopieren, anpassen und aufrufen. Folgende Werte sind im Skript zu pflegen:

Konfiguration der Quelle

Bei der Konfiguration der Quelle müssen Sie davon ausgehen, dass es sich dabei nicht um das lokale Active Directory handelt, sondern meist ein anderer Verzeichnisdienst,  d.h. ein anderer Forest oder ein ganz anderer LDAP-Server. Hier ein paar Beispiele der Konfiguration.

Besonderheit "Bidirektional" und MultiPoint

MiniSync hat ursprünglich nur dazu gedient, die Benutzer einer Exchange 5.5 Organisation in ein Active Directory in eine Richtung zu übertragen. Nun kann es aber sein, dass Sie natürlich bidirektional arbeiten wollen. Hierbei ist besondere Vorsicht walten zu lassen, damit die Kontakte der Hin-Replikation nicht auf der Rückreplikation erneut repliziert werden. Natürlich könnte man vor jedem Schreiben prüfen, ob es die Mailadresse schon gibt, Aber das kostet Zeit. Man könnte auch die ZielOU der Hin-Replikation bei der Rückreplikation ausschließen. Ich bevorzuge den Trick, das Zielobjekt zu "kennzeichnen". Dazu eignet sich ein beliebiges LDAP-Feld (z.B. ExtensionAttribute13), in dem einfach die Quelle des Objekts hinterlegt wird.

Bidirektional Replikation mit Kennzeichnung

 So kann per Filter einfach ein Ausschlusskriterium angewendet werden.

Manchmal kann es aber auch passieren, dass mehrere Verzeichnisdienste miteinander replizieren. Das kann z.B. eine "Dreiecksbeziehung" sein oder auch einfach eine Replikation über ein Zwischenverzeichnis (z.B. ADAM). Dann muss man die Daten natürlich weiter anpassen.

Bidirektional mit mehreren Verzeichnisdiensten

Sind die verschiedenen Verzeichnisdienste nun zudem unterschiedliche Produkte, dann kann es sehr schnell knifflig werden.

Bislang geschaffene Lösungen

MiniSync habe ich schon bei mehreren Kunden produktiv im Einsatz. Natürlich wird der Code immer an die Bedürfnisse des Kunden entsprechend angepasst oder erweitert.

Sie sehen also, dass MiniSync schon mehrfach erfolgreich im Einsatz ist und Informationen aus einem Verzeichnis relativ problemlos an ein anderes Verzeichnis übertragen kann.

Skript

Bitte haben Sie Verständnis dafür, dass dieses Skript nur im Rahmen einer Dienstleistung vor Ort verfügbar ist. Sicher ist MiniSync eine kleine Lösung die auch an die Zielsysteme angepasst werden muss. Auch ist das Thema "Verzeichnisabgleich" bei weitem nicht trivial, so dass das Schadens- und Störpotential hoch ist.

MiniSync ist nicht kostenfrei downloadbar, weil die Einrichtung eines DirSync immer Anpassungen an Quelle, Ziel und Skript erfordern. Rufen Sie einfach an.
Informationen, warum diese Skripte nicht öffentlich sind, finden Sie auf nicht public.

Weiterentwicklung

Ich hatte schon länger vor, MiniSync als Version 2 modularer zu gestalten. Das Projekt ist aber mangelt Zeit einfach nicht weiter geführt worden und durch die Powershell sehe ich da auch keine Zukunft mehr drin. Im Archiv finden Sie noch die ersten Planungen zu MiniSync2 dokumentiert. Ich gehe davon aus, dass die nächste Version mit Powershell arbeiten wird.

Probleme und deren Lösung

Bei der Entwicklung des Skripts bin ich natürlich über die ein oder anderen Probleme gestolpert.

Weitere Links

Keywords:MiniOWA OWA ASP