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.

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.

Auch Sonderzeichen sind in LDAP natürlich möglich und LDIFDE exportiert diese problemlos. Einige Felder haben einen Umlaut aber einige Felder nutzen auch eine Base64-Codierung, erkennbar an den zwei "::" nach dem Feldname

dn: CN=UmlautuserÄÖÜ UmlautuserÄÖÜ,OU=UmlautttestÄÖÜ,DC=carius,DC=de
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn:: VW1sYXV0dXNlcsOEw5bDnCBVbWxhdXR1c2Vyw4TDlsOc
sn:: VW1sYXV0dXNlcsOEw5bDnA==
givenName:: VW1sYXV0dXNlcsOEw5bDnA==
distinguishedName:: 
 Q049VW1sYXV0dXNlcsOEw5bDnCBVbWxhdXR1c2Vyw4TDlsOcLE9VPVVtbGF1dHR0ZXN0w4TDlsOcLE
 RDPWNhcml1cyxEQz1kZQ==
instanceType: 4
displayName:: VW1sYXV0dXNlcsOEw5bDnCBVbWxhdXR1c2Vyw4TDlsOc
name:: VW1sYXV0dXNlcsOEw5bDnCBVbWxhdXR1c2Vyw4TDlsOc
userAccountControl: 512
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 0
pwdLastSet: 132585690028081380
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAwM8SUMELJU0m/cWzlQQAAA==
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName:: VW1sYXV0dXNlcsOEw5bDnA==
sAMAccountType: 805306368
userPrincipalName:: VW1sYXV0dXNlcsOEw5bDnEBjYXJpdXMuZGU=
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=carius,DC=de

Dennoch sollten Sie bei der Übertragung zwischen Umgebungen den Zeichensatz kontrollieren.

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.ldf -d "CN=fcarius,OU=Technik,OU=Abteilung,DC=msxfaq,DC=de"

Verbindung mit "nawsv010.msxfaq.de" wird hergestellt.
Anmelden als aktueller Benutzer unter Verwendung von SSPI
Das Verzeichnis wird in die Datei fcarius.ldf 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.ldf -d "OU=Technik,OU=Abteilung,DC=msxfaq,DC=de"

Verbindung mit "nawsv010.msxfaq.de" wird hergestellt.
Anmelden als aktueller Benutzer unter Verwendung von SSPI
Das Verzeichnis wird in die Datei technik.ldf exportiert.
Es wird nach Einträgen gesucht...
Die Einträge werden geschrieben............................................
43 Einträge wurden exportiert.
  • Export aller Objekte eines Forest
    Dies ist besonders dann hilfreich, wenn Sie nicht genau den Objektnamen wissen.
C:\>ldifde -f gc.ldf -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.ldf exportiert.
Es wird nach Einträgen gesucht...
Die Einträge werden geschrieben............................................
43 Einträge wurden exportiert.
  • Export der komplette Domäne
    Das kann durchaus helfen, Textstellen und Verweise auf alte Server etc. in den verschiedenen Feldern zu finden.
C:\>ldifde -f test.ldf

Verbindung mit "nawsv010.msxfaq.de" wird hergestellt.
Anmelden als aktueller Benutzer unter Verwendung von SSPI
Das Verzeichnis wird in die Datei test.ldf 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=msxfaq,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=msxfaq,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=msxfaq,DC=de
memberOf: CN=SGG-Mitarbeiter,OU=Abteilung,DC=msxfaq,DC=de
memberOf: CN=\+Alle Mitarbeiter von Net at Work,CN=Users,DC=msxfaq,DC=de
deliverAndRedirect: FALSE
proxyAddresses: smtp:fcarius@msxfaq.de
proxyAddresses: X400:c=DE;a= ;p=MSXFAQ;o=Paderborn;s=Carius;g=Frank;
proxyAddresses: fax:653
proxyAddresses: SMTP:frank.carius@msxfaq.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=MSXFAQ/ou=Paderborn/cn=Recipients/cn=fcarius
UserPrincipalName: fcarius@msxfaq.de
lockoutTime: 0
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=msxfaq,DC=de
mail: frank.carius@msxfaq.de
msExchMailboxGuid:: gBhy5tVQpkGWDG2y9bHrKg==

Für die Volltextsuche nach Zeichenfolgen ist so ein kompletter Export sehr brauchbar. Sie könnten auch regelmäßig einen Export der "geänderten Objekte" archivieren, um so eine Geschichte ihres LDAP-Verzeichnisdiensts zu erhalten

Benutzer per Import anlegen

Zum Anlegen eines Benutzers reicht ein ganz kurzes LDIF-File

dn: CN=fcarius,OU=Technik,OU=Abteilung,DC=msxfaq,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.

Export für Import in anderes AD

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, objectGUID oder MemberOf" exportieren, aber nicht mehr importieren. Daher sollten sie diese Felder gar nicht erst exportieren.

ldifde -f domain.ldf -o objectGUID,distinguishedNam,uSNCreated,uSNCreated,whenChanged,whenCreated,dSCorePropagationData

Diese Zeile sollten Sie aber noch im einen LDAP-Filter erweitern, denn die Domain, FSMO-Rollen u.a. wollen Sie nicht wirklich später wieder importieren. Sinnvoller ist hier dann ein Export getrennt nach Objekten, in getrennte Dateien.

Achtung: Das Kennwort eines Benutzers wird so nicht exportiert. Für eine "Migration" zwischen Domänen des gleichen Forests sollten Sie besser Move-ADObject oder ADMT -Active Directory Migration Toolkit nutzen

Diese beiden Befehle exportieren dann die Benutzer und Dateien. Leider sind "Computer" eine Unterklasse von Person und damit hier auch enthalten.

Ehe Sie alles exportieren sollen Sie Felder ausschließen, die sowieso nicht importiert werden können. Gefunden habe ich bei Benutzern und Gruppen bisher:

objectGUID,objectSID,distinguishedName,dBCSPwd,ntPwdHistory,lmPwdHistory,
badPasswordTime,badPwdCount,lastLogon,lastLogoff,logonCount,pwdLastSet,
rid,sAMAccountType,supplementalCredentials,isCriticalSystemObject,
uSNchanged,uSNCreated,whenChanged,whenCreated,
memberOf,PrimaryGroupID,dSCorePropagationData

LDIFDE kennt dazu aber auch einen Schalter "-m  Enable the SAM logic on export.", so dass diese geschützten Felder gar nicht mehr exportiert werden.

Andere Objekte haben natürlich noch andere Felder wie "CreationTime". "NextRID", etc. Die sind aber zumindest bei Benutzern und Gruppen nicht vorhanden. Wenn Sie sich nicht sicher sein, dann versuchen Sie einfach das Feld mit ADSIEDIT zu ändern. Entweder sehen Sie schon, dass das Feld grau ist oder sie bekommen einen Fehler wie: 

Eine weitere Option ist das Ausblenden von Feldern, die nicht schreibbar sind.

Entsprechend können Sie dann den Export erweitern. (Das Caret-Zeichen (^) zeit in einer CMD-Datei einen Zeilenumbruch an.

ldifde ^
-f users.ldf ^
-r "(objectclass=user)" ^
-d "ou=ldifdetest,dc=carius.dc=de" ^
-o objectGUID,objectSID,dBCSPwd,ntPwdHistory,lmPwdHistory,badPasswordTime,badPwdCount,lastLogon,lastLogoff,logonCount,pwdLastSet,^
rid,sAMAccountType,supplementalCredentials,isCriticalSystemObject,uSNchanged,uSNCreated,whenChanged,whenCreated,memberOf,^
distinguishedName,PrimaryGroupID,dSCorePropagationData,SAMAccountType

ldifde ^
-f groups.ldf ^
-r "(objectclass=group)" ^
-o objectGUID,distinguishedNam,uSNchanged,uSNCreated,whenChanged,whenCreated,dSCorePropagationData,LastLogon,LastLogoff,SAMAccountType

Alternativ können Sie natürlich den Export mit einer Liste der gewünschten Felder durchführen. Wenn Sie nur die Objekte aber nicht alle Stammdaten benötigen, dann kann das einfacher sein:

ldifde ^
-f user.ldf ^
-d “dc=carius,dc=de” ^
-p subtree ^
-r “(&(objectCategory=person)(objectClass=User)(givenname=*))” ^
-l “cn,givenName,objectclass,samAccountName,Userprincipalname,Firstname,Givenname”

Am Ende haben sie eine LDF-Datei mit den Objekten.

Wenn Sie eine LDF-Datei von einer anderen Quelle bekommen und keinen Einfluss auf die Inhalte haben, dann können Sie per Powershell mal schnell eine Zeile entfernen. Hier am Beispiel von SAMAccountType

gc .\import.ldif `
| %{if ($_ -notlike "sAMAccountType:*") {$_}} `
| Out-File .\be-Gasperich-export2.ldif

Allerdings geht das natürlich nur mit Feldern, die einzeilig gespeichert sind. Wenn ein Feld zu lange ist, kann das LDIF-Format auch in der nächsten Zeile weitermachen. Dann sollte die Logik schon etwas ausgeklügelter sein.

Mit LDIFDE importieren

Natürlich kann mit LDIFDE auch importiert werden. Allerdings muss die vorher angelegte Exportdatei natürlich "umgeschrieben" werden. In der Zielumgebung ist zumindest der Distinguishedname anders. Wenn Sie eine 1:1 Übertragung einfach in eine andere Domain nutzen möchten, dann kommt ihnen die Option "-c" entgegen:

-c <String1> <String2>  Replaces all occurrences of <String1> with <String2>. Generally, you use this parameter when you import data from one domain to another and you must replace the distinguished name of the export domain (<String1>) with the distinguished name of the import domain (<String2>)
Quelle https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc731033(v=ws.11)

String1 ist also der "FromDN" in der LDF-Datei und <string2> der gewünschte String für das Ziel. Das geht dann einfach mit:

ldifde ^
-i ^
-f user.ldf ^
-c "dc=carius,dc=de" "dc=msxfaq,dc=de"

Wobei auch bei der ganz kurzen Zeile noch einiges schief gehen kann. Hier mal eine Sammlung der Ursachen und der passenden Fehlermeldung von LDIFDE.

  • Falscher DN
    Das passiert, wenn Sie die LDF-Datei eines anderen Forest importieren und vergessen den DN mit der Option "-c" umzuschreiben

Add error on entry starting on line 1: Referral
The server side error is: 0x202b A referral was returned from the server.
The extended server error is:
0000202B: RefErr: DSID-031007F9, data 0, 1 access points
ref 1: 'msxfaq.de'

  • Nicht beschreibbares Attribut. Gesperrte Felder
    Da hat sich in ihren LDIF-Export wohl eine Zeile mit einem Feld geschmuggelt, welches nicht importiert werden kann, z.B. "USNCreated", "USNChanged", "ObjectGUID", "ObjectSID"  etc. Sie sollten diese beim Export mit LDIFDE mit "-o" ausschließen oder nachträglich entfernen.

Add error on entry starting on line 1: Unwilling To Perform
The server side error is: 0x209a Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM).

  • Feld nicht eindeutig
    In den meisten Fällen importieren Sie einen Benutzer mit einem UPN, der schon vergeben ist

Add error on entry starting on line 1: Constraint Violation The server side error is: 0x21c8
The operation failed because UPN value provided for addition/modification is not unique forest-wide.

  • PrimaryGroupID
    Eventuell haben Sie dieses Feld noch in der LDIF-Datei. Die "513" steht hier für "Domain Benutzer" und LDIFDE stört sich wohl dran, dass der Benutzer nicht in der Gruppe ist. Das geht ja auch nicht, da er gerade erst angelegt wird. Lassen Sie das Feld beim Export weg und ändern Sie ggfls. nachträglich die primäre Gruppe, wenn dies erforderlich wäre.

Add error on entry starting on line 1: Unwilling To Perform
The server side error is: 0x529 The specified user account is not a member of the specified group account.
The extended server error is:
00000529: SvcErr: DSID-031A1254, problem 5003 (WILL_NOT_PERFORM), data 0

  • Password nicht sicher
    Auch beim Import mit LDIFDE können Kennworte gesetzt werden und werden dann gegen die Kennwortrichtlinien geprüft. Wenn kein Kennwort gesetzt wird, dann legt LDIFDE ein deaktiviertes Konto an.

The server side error is: 0x52d Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirements of the domain.

  • Die Ziel-OU muss schon existieren.
    Sie sollten also vorher die OU-Struktur aufbauen oder vorab importieren

Add error on entry starting on line 1: No Such Object
The server side error is: 0x208d Directory object not found.
The extended server error is:
0000208D: NameErr: DSID-03100241, problem 2001 (NO_OBJECT), data 0, best match of: 'DC=carius,DC=de'

  • Encoding
    Vermutlich geht LDIFDE von einer Unicode-Datei aus und sie liefern eine ANSI oder ASCII-Datei. Versuchen Sie mal die Datei mit Notepad zu lesen und mit einem anderen Format zu schreiben. Oder sie arbeiten mit dem Parameter "-u" um explizit Unicode-Dateien zu schreiben und zu lesen.

Add error on entry starting on line 1: No Such Attribute
The server side error is: 0x57 The parameter is incorrect.
The extended server error is:
00000057: LdapErr: DSID-0C091082, comment: Error in attribute conversion operation, data 0, v3839

There is a syntax error in the input file
Failed on line 1. The last token starts with '?'.

  • Schemaerweiterung fehlt
    Das kann passieren, wenn Sie im LDIF-File zusätzliche Felder haben, die im Ziel-Forest nicht vorhanden sind, z.B. weil dort keine Exchange Schema Erweiterung erfolgt ist.

Add error on entry starting on line 1: No Such Attribute
The server side error is: 0x57 The parameter is incorrect.
The extended server error is:
00000057: LdapErr: DSID-0C091082, comment: Error in attribute conversion operation, data 0, v3839

  • Gruppen und Mitglieder
    Wenn Sie eine Gruppe importieren, dann müssen die Mitglieder schon alle als Objekt vorhanden sind. Ansonsten schlägt der Import der kompletten Gruppe fehl. Sie sollten also zuerst die Benutzer importieren. Wenn Gruppen in Gruppen Mitglied sind, dann helfen mehrere Importe. Zirkelbezüge lassen sich so aber nicht beheben.

Ich hoffe, ich habe damit die meisten Fehler gefunden und beschrieben.

Ändern per LDIFDE

Heute würde ich Massenänderungen eher nicht per LDIFDE machen, sondern per LDAP und PowerShell bzw. mit Set-ADUser. Es geht meist schneller und auch der Import anderer Datenquellen ist aus meiner Sicht einfacher.

Hier ein Beispiel, um die Gruppenmitgliedschaften einer Gruppe per LDIF-Import zu ändern. Beachten Sie, dass sowohl der "Changetype" als auch dass "add: feldname" hier wichtig sind, um die Benutzer hinzuzufü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
-

Löschen per LDIF

Das ist dann der vermutlich einfachste Fall. Sie geben den DistinguishedName des Objekts an und den passenden "Changetype: delete"

dn: CN=group1,OU=test,Dc=msxfaq,dc=test
changetype: delete

Auch hier können Fehler auftreten

  • OU ist "geschützt"
    Das ist der neue Regelfall, wenn Sie eine OU anlegen, dass ein "Deny Delete" aktiviert ist.

    Viel Spaß bei größeren Strukturen das wieder "freizugeben"

Add error on entry starting on line 1: Insufficient Rights The server side error is: 0x5 Access is denied.
The extended server error is: 00000005: SecErr: DSID-031526E9, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0

  • Keine Rekursion
    Sie können mit LDIFDE nicht die Wurzel löschen annehmen, es würde dann der komplette Baum gelöscht. Sie müssen von unten nach oben jedes Element individuell löschen. Der Fehler dazu lautet:

Add error on entry starting on line 1: Not allowed on Non-leaf The server side error is: 0x208c
The operation cannot be performed because child objects exist. This operation can only be performed on a leaf object.
The extended server error is: 0000208C: UpdErr: DSID-030A0452, problem 6003 (CANT_ON_NON_LEAF), data 0

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.ldf" > ausgabe.ldf

  • 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