LDP, LDIFDE, CSVDE

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 fcarius.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

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

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

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

CSVDE Sample

Analog zu LDIFDE kann ihnen auch CSVDE beim Export und Import helfen. Im Gegensatz zu LDIFDE nutzt CSVDE, wie der Name schon sagt, CSV-Dateien. Der Aufruf der folgenden Zeile exportiert z.B.: alle Benutzer mit allen Feldern in eine kommaseparierte Datei.:

CSVDE -f alluser.csv -r (objectclass=user)

Diese CSV-Datei können Sie problemlos mit Excel öffnen und weiter verarbeiten. Sie können natürlich beim Export auch angeben, welche Felder sie nur interessieren. Damit lässt sich dann einfach eine Telefonliste o.ä. aus dem Active Directory erstellen:

CSVDE -f Benutzer.csv -r (objectclass=user) -l sAMAccountName,name,legacyExchangeDN

Durch diesen Aufruf werden alle Benutzerobjekte exportiert. CSVDE exportiert in der ersten Spalten immer den DN mit, so dass der NT4 Anmeldename dann in der zweiten Spalte steht etc.

Weitere Links

Keywords:LDIFDE CSVDE LDP Export LDAP