LDIFDE

Diese Programme sind über die Support Tools auf der Windows CD zu installieren. LDIFDE und CSVDE dienen dazu, per Kommandozeile Informationen aus dem Active Directory zu exportieren aber auch zu importieren. Diese Programme sind quasi ein Ersatz für die Import/Export-Funktion des alten Exchange 5.5. Administrators.

LDP ist eine grafische Oberfläche, die per LDAP direkt Änderungen am Active Directory erlaubt. Aber auch hier gilt, dass diese Werkzeuge nicht nur hilfreich, aber auch sehr scharf sind.

Mit LDIFDE exportieren

Eine der häufigsten Aufgaben ist der Export von Informationen über bestimmte Objekte. LDIFDE ist hier sicher das beste Programm, da es per Kommandozeile einzelne Objekte aber auch komplette OU's oder Domänen exportieren kann. Diese Dateien können mit einigen Anpassungen dann auch wieder für Importe verwendet werden.

Export der Informationen eines Benutzers

C:\> ldifde -f fcarius.ldif -d "CN=fcarius,OU=Technik,OU=Abteilung,DC=netatwork,DC=de"
Verbindung mit "nawsv010.netatwork.de" wird hergestellt.
Anmelden als aktueller Benutzer unter Verwendung von SSPI
Das Verzeichnis wird in die Datei fcarius.ldif exportiert.
Es wird nach Einträgen gesucht...
Die Einträge werden geschrieben..
1 Einträge wurden exportiert.

Der Befehl wurde einwandfrei durchgeführt.

Export aller Objekte einer OU

C:\>ldifde -f technik.ldif -d "OU=Technik,OU=Abteilung,DC=netatwork,DC=de"
Verbindung mit "nawsv010.netatwork.de" wird hergestellt.
Anmelden als aktueller Benutzer unter Verwendung von SSPI
Das Verzeichnis wird in die Datei technik.ldif exportiert.
Es wird nach Einträgen gesucht...
Die Einträge werden geschrieben............................................
43 Einträge wurden exportiert.

Export aller Objekte eines Forest

C:\>ldifde -f gc.ldif -t 3268 -s gcname -p subtree
Verbindung mit "gcname" wird hergestellt.
Anmelden als aktueller Benutzer unter Verwendung von SSPI
Das Verzeichnis wird in die Datei gc.ldif exportiert.
Es wird nach Einträgen gesucht...
Die Einträge werden geschrieben............................................
43 Einträge wurden exportiert.

Dies ist besonders dann hilfreich, wenn Sie nicht genau den Objektnamen wissen. Im Extremfall können Sie natürlich auch die komplette Domäne exportieren.

C:\>ldifde -f test.ldif
Verbindung mit "nawsv010.netatwork.de" wird hergestellt.
Anmelden als aktueller Benutzer unter Verwendung von SSPI
Das Verzeichnis wird in die Datei test.ldif exportiert.
Es wird nach Einträgen gesucht...
Die Einträge werden geschrieben.................................................
................................................................................
.................................................................................
................................................................................
................................................................................
................................................................................
...............................
1999 Einträge wurden exportiert.

Der Befehl wurde einwandfrei durchgeführt.

Die mit "-f" angegebene Textdatei enthält danach alle Informationen über die exportierten Objekte. Sie sehen in dieser Datei auch sehr viele Felder, die mit der normalen MMC für Benutzer und Computer überhaupt nicht erreichbar sind. Viele Felder sind auch nicht so einfach in Klartext lesbar, z.B.: die Zertifikate, SID, etc. Hier sehen Sie einen kleinen Auszug meines eigenen Objekts. Die komplette Information ist über 41Kbyte groß.

dn: CN=fcarius,OU=Technik,OU=Abteilung,DC=netatwork,DC=de
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: fcarius
sn: Carius
c: DE
l: Paderborn
st: NRW
title: Dipl.Ing. (BA)
description: Technik
postalCode: 33104
telephoneNumber: 613
facsimileTelephoneNumber: 653
givenName: Frank
distinguishedName: CN=fcarius,OU=Technik,OU=Abteilung,DC=netatwork,DC=de
instanceType: 4
whenCreated: 20000920195349.0Z
whenChanged: 20050202152320.0Z
displayName: Carius, Frank
USNCreated: 17053
USNChanged: 4148007
telephoneAssistant: +49 5251 304 600
memberOf: CN=SGG-Technik,OU=Abteilung,DC=netatwork,DC=de
memberOf: CN=SGG-Mitarbeiter,OU=Abteilung,DC=netatwork,DC=de
memberOf: CN=\+Alle Mitarbeiter von Net at Work,CN=Users,DC=netatwork,DC=de
deliverAndRedirect: FALSE
proxyAddresses: smtp:fcarius@netatwork.de
proxyAddresses: X400:c=DE;a= ;p=Net at Work GmbH;o=Paderborn;s=Carius;g=Frank;
proxyAddresses: fax:653
proxyAddresses: SMTP:frank.carius@netatwork.de
extensionData::
RgBBAEMAUwBZAFMATQBCAFgARABhAHQAYQAAABAQEBABAAAAEQAAAAMAAQAAAAAAAQAAAAAAAAADAA
EAAAAAAAIAAAAAAAAAHgABAAAAAAAQAQAAAAAAAB4
objectGUID:: x3br8sCjve2JwGroFsdg0Q==
userAccountControl: 512
badPwdCount: 0
codePage: 0
countryCode: 276
badPasswordTime: 127506994640775367
lastLogoff: 0
lastLogon: 127518258080604977
logonHours:: ////////////////////////////
primaryGroupID: 513
objectSid:: AQUAABCCDEAAUVAAAAiVW2AGSD0AE/OUgE8QMAAA==
sAMAccountName: fcarius
legacyExchangeDN: /o=Net at Work GmbH/ou=Paderborn/cn=Recipients/cn=fcarius
UserPrincipalName: fcarius@netatwork.de
lockoutTime: 0
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=netatwork,DC=de
mail: frank.carius@netatwork.de
msExchMailboxGuid:: gBhy5tVQpkGWDG2y9bHrKg==

Die per LDIFDE exportierte Information ist meist komplett ausreichend, um den Benutzer wieder mit der gleichen Information per Import anzulegen. Allerdings gibt es Einschränkungen. So kann man per LDIFDE zwar Felder wie "whenChanged, objectGUI oder MemberOf" exportieren, aber nicht mehr importieren. Zum Anlegen eines Benutzers reicht ein ganz kurzes LDIF-File

dn: CN=fcarius,OU=Technik,OU=Abteilung,DC=netatwork,DC=de
changetype: add 
cn: fcarius
objectClass: user 
samAccountName: fcarius

Alle anderen Felder sind optional aber natürlich sollten auch Vorname, Nachname, Firma etc. gesetzt werden.

Mit LDIFDE importieren

Natürlich kann mit LDIFDE auch importiert werden. Allerdings muss die vorher angelegte Exportdatei natürlich "umgeschrieben" werden. Hier das Beispiel, um die Gruppenmitgliedschaften zu ändern. Beachten Sie, dass sowohl der "Changetype" als auch dass "add: feldname" hier wichtig sind, um die Benutzer hinzu zu fügen. Es ist auch ein "replace" möglich. Beachten Sie auch das "-" am Ende des Datensatzes um den nächsten abzutrennen.

dn: CN=group1,OU=test,Dc=msxfaq,dc=test
changetype: modify
add: member
member: CN=User1,OU=Test,DC=msxfaq,DC=test
member: CN=User2,OU=Test,DC=msxfaq,DC=test
member: CN=User3,OU=Test,DC=msxfaq,DC=test
-

dn: CN=group2,OU=test,Dc=msxfaq,dc=test
changetype: modify
add: member
member: CN=User1,OU=Test,DC=msxfaq,DC=test
-

Kleiner Hinweis: Wenn hier z.B. ein Objekt nicht existiert, dann schlägt der komplette Import dieser Gruppe fehl.

Information zum LDIF-Format

Das Skript liest LDIF-Dateien ein, welche natürlich ein bestimmtes Format haben. Hier ein Muster einer solchen Daten  mit einigen Sonderfällen

dn: CN=Test1, OU=OU1, DC=msxfaq,DC=de
changetype: add
cn: Test1
objectClass: user
samAccountName: Test1SAM
givenName: TEST
test: test1
sn: 1
Test3: Feld mit : im String
 und ein : in der zweiten Zeile

dummy
changetype: modify
replace: unicodePwd
unicodePwd::IgBZAG8AdQByAE4AZQB3AFAAdwBkACIA


dn: CN=Test2, OU=OU1, DC=msxfaq,DC=de
changetype: delete

Hier sind die drei möglichen "Changetype"-Parameter zu sehen, über die ein Objekt angelegt, verändert oder gelöscht wird. für den Import mit LDIFSync sind natürlich nur die Datensätze mit der Funktion "ADD" unterstützt. Beim Einlesen der Datei müssen natürlich verschiedene Sonderfälle beachtet werden, wie z.B.: Felder, die sich über mehrere Zeilen erstrecken.

Wichtig ist aber immer, das die erste Zeile eines Datensatzes durch "dn" eingeleitet wird und danach der "changetype" steht.

LDIFDE und Exchange 5.5

Auch Exchange 5.5 bietet natürlich einen LDAP-Server an. Dieser kann ebenfalls per LDIFDE erreicht werden. Allerdings heißen die Felder etwas anders.

ldifde -s 10.1.1.4 -a cn=Administrator,dc=NT4DOM Password! -f ex55-ldifde.ldf

Wichtig ist hierbei nur, dass Sie mit "-a" die einfache Anmeldung nutzen und den Benutzernamen als auch die Domäne mit angeben. Das Kennwort können Sie mit "*" natürlich auch über eine versteckte Eingabe übermitteln.

Ansonsten ist natürlich der "Exchange 5.5 Admin" immer noch eine sehr effektive Möglichkeit, Verzeichniseinträge zu exportieren als auch zu importieren. Die GUI erlaubt hier schon sehr umfangreiche Tätigkeiten. Über die Kommandozeile und entsprechend vorbereitete CSV-Dateien lassen sich noch mehr Parameter setzen

  • 840157 Mail-enabled public folders do not appear in the Global Address List after you configure replication in Exchange Server 5.5

LDIFDE und Fallen

Sehr viele KB-Artikel (z.B. 237677 using LDIFDE to import and export directory objects to Active Directory) gehen darauf ein, wie man Benutzer, Verteiler etc. mittels LDIFDE einfach exportiert und wieder importiert

  • User und System Attribute und die Option "-m"
    Einfach mal so schnell ein paar user zu exportieren und dann wieder im Ziel zu importieren ist gar nicht so einfach, da LDIFDE auch Systemattribute exportiert, die man aber nie importieren kann oder sollte, z.B. die SID, USNCreated, USNLastChanged, ObjectGUID und einige mehr. Wenn Sie beim Export "-m" mit angeben, dann lässt LDIFDE diese Attribute gleich draußen.
  • SIDHistory
    Die Option "-m" vergisst aber leider die SIDHistory nicht. In der LDIF-Datei ist eben dieses noch drin und verhindert die Neuanlage von Benutzern. Die SIDHistory kann leider nicht per LDIFDE erstellt werden. Das Entfernen der SIDHistory geht sehr einfach mit dem Befehl "FIND" oder Sie sagen LDIFDE beim Import mit "-o sidhistory", dass er das Feld übergehen soll.

FIND /V /I "sIDHistory:" "eingabe.ldif" > ausgabe.ldif

  • Weitere Schemaerweiterungen und Pflichtfelder
    Nun kann das Active Directory durch verschiedene Anwendungen erweitert werden. Dabei kann es passieren, dass der Hersteller weitere Felder zur "Pflicht" macht und doch als Systemfeld kennzeichnet. Schade, dass LDIFDE das Schema nicht dahingehend untersucht. So bleiben bei "-m" solche Felder weg, aber beim Import kann das Objekt dann aufgrund unvollständiger Daten nicht angelegt werden.
  • User, Kennworte und Disabled user
    Exportiert man die Quelle mit Systemfeldern, dann enthält die LDIFDATEI auch das Kennwort, welches so aber nicht Import werden kann. Sie können das Kennwort mit "-m" beim Expert schon ausschließen oder mit der bekannten "FIND"-Methode der SIDHistory entfernen.
    Normalerweise legt LDIFDE neue Benutzer ohne Kennwort nur "Disabled" an mit der Option, dass der Anwender sein Kennwort nach der Aktivierung ändern muss.
  • Verteiler und Mitgliedschaften
    LDIFDE kann auch Verteiler exportieren. Hierbei wird in der LDIF-Datei zuerst der Verteiler selbst ohne Mitglieder so heraus geschrieben, dass er wieder angelegt werden kann. Die Mitglieder werden nachfolgende über einen "Modify-"Block angehängt. Wenn sich im Ziel also der Pfad zu den Mitgliedern geändert hat, muss dies angepasst werden. (z.B. Suchen und Ersetzen)
  • Unicode
    Speziell wenn umlaute im Spiel sind, werden Sie in einigen Feldern keine klar lesbaren Buchstaben sehen sondern nur einen Salat mit einem "=" am Ende. Das ist ein deutliches Zeichen, dass hier die Zeichenkesse "Base64"-codiert wurde. Gerade bei "member"-Einträgen macht dies eine Änderung natürlich nicht gerade einfacher.

Ich hoffe die meisten "Probleme" damit beschrieben zu haben, auf die ich bislang gestoßen bin.

Weitere Links