LDIFDE.exe ist ein wunderbares Tool um Objekte aus dem Active Directory auszulesen, ändern und auch zu erstellen. Wer sich schon einmal mit LDIFDE beschäftigt hat, stellt aber schnell fest, dass die Syntax der Importdatei sich nicht ganz einfach darstellt und eine Datei für das Erstellen von Organisationseinheiten, Benutzern, Kontakten, Gruppen oder Computern in großer Menge nicht schnell mal so erzeugt ist.
Da ist eine Excel-Tabelle auf jeden Fall einfacher und schneller zu erstellen und zu pflegen. Verwendet man in der Excel-Tabelle auch noch die Excel-Formeln, die im Artikel „Importdatei für CSVDE.exe einfach generieren“ beschrieben werden, hat man sehr schnell einen umfangreichen Active-Directory-Inhalt im Excel-Format.
Jetzt müsste diese Excel-Tabelle nur noch ins LDIF-Format gebracht werden. Dazu habe ich ein Script geschrieben, das mir diese Arbeit automatisiert.
Die einzigen Voraussetzungen für die erfolgreiche Transformation sind:
- Die ersten beiden Zellen in der Excel-Tabelle.
- Keine Leerzellen in der Überschriftenzeile.
1. Die ersten beiden Zellen in der Excel-Tabelle
Damit die Formatierung in der LDIF-Datei stimmt, muss die erste Spalte der Excel-Tabelle aus dem „DN“ (Distinguished Name) und die zweite Spalte aus dem LDIF-Attribut „ChangeType“ bestehen.
2. Keine Leerzellen in der Überschriftenzeile
Die erste Zeile der Excel-Tabelle stellt die Überschriften und gleichzeitig die Attribute der LDIF-Datei dar. Um sicherzustellen, dass alle benötigten Attribute in der LDIF-Datei aufgeführt sind, darf keine leere Zelle in der Überschriftenzeile vorkommen, da eine leere Zelle in der Überschrift als Ende der Überschriftenzeile interpretiert würde.
Hier ein Beispiel der ersten Zellen einer geeigneten Excel-Tabelle:
Sollte ein Attributwert nicht für alle Objekte benötigt werden, kann diese Zelle einfach leer gelassen werden (siehe oben Zelle „E2“). Unten aufgeführt ist das Script, welches diese Arbeit für uns macht. Das Script ist in Visual Basic Script geschrieben:
-
Option Explicit
-
-
Dim objDialog, intResult
-
Dim objTargetDialog, intReturn
-
Dim objFSO, objFile, objExcel, objWorkbook, Line, Row, objTitle, objData
-
-
Const ForReading = 1
-
-
Set objDialog = CreateObject("UserAccounts.CommonDialog")
-
objDialog.Filter = "*.xls|*.xls|All Files|*.*"
-
objDialog.FilterIndex = 1
-
objDialog.InitialDir = "C:\"
-
intResult = objDialog.ShowOpen
-
If intResult = 0 Then
-
wscript.Quit
-
End If
-
Set objTargetDialog = CreateObject("SAFRCFileDlg.FileSave")
-
objTargetDialog.FileName = "C:\LDF_Input.ldf"
-
objTargetDialog.FileType = ".ldf"
-
intReturn = objTargetDialog.OpenFileSaveDlg
-
If intReturn Then
-
Set objFSO = CreateObject("Scripting.FileSystemObject")
-
Set objFile = objFSO.CreateTextFile(objTargetDialog.FileName)
-
-
Set objExcel = CreateObject("Excel.Application")
-
Set objWorkbook = objExcel.Workbooks.Open (objDialog.FileName, ForReading, False)
-
Line = 1
-
Row = 2
-
Do until objExcel.Cells(Row,Line).Value = ""
-
Do until objExcel.Cells(1,Line).Value = ""
-
objTitle = objExcel.Cells(1,Line)
-
objData = objExcel.Cells(Row,Line)
-
If objData <> "" Then
-
objFile.WriteLine objTitle & ": " & objData
-
End If
-
Line = Line + 1
-
If objExcel.Cells(1,Line).Value = "" Then
-
objFile.WriteLine
-
End If
-
loop
-
Row = Row + 1
-
Line = 1
-
loop
-
objExcel.Quit
-
objFile.Close
-
Else
-
WScript.Quit
-
End If
-
-
Wscript.Echo "Process succsessful!"
-
-
wscript.Quit
– End Script –
Um das Script zu verwenden, kopiert man einfach die Zeilen zwischen "- Start Script -" und "- End Script -" in eine Textdatei und benennt diese Datei dann um in „LDIF-Generator.vbs“. Jetzt sollte eine den Anforderungen entsprechende Excel-Tabelle und die Datei „LDIF-Generator.vbs“ existieren. Wenn man nun die Date „LDIF-Generator.vbs“ ausführt, wird man erst aufgefordert, die benötigte Excel-Datei anzugeben:
Nach dem auswählen der Excel-Datei wird man aufgefordert, den Speicherort und den Dateinamen der LDIF-Datei anzugeben. Der vorgeschlagene Dateiname kann gerne übernommen werden:
Sobald die Excel-Tabelle eingelesen wurde und die Daten in die LDIF-Datei geschrieben wurden, wird dies mit einer Bestätigung angezeigt:
Die erstellte Datei kann mit einem Texteditor eingesehen und überprüft werden. Hier ein Beispiel:
Der Inhalt der LDIF-Datei kann jetzt mit dem Programm LDIFDE.exe ins Active Directory importiert werden. Dazu wird LDIFDE.exe mit den Schaltern -i (für den Importmodus) und -f (Dateipfad) in der Eingabeaufforderung aufgerufen. Weitere Informationen zur LDIFDE.exe gibt es auch im Artikel „Kommandozeilentools zur AD-Bearbeitung“. Anzeigen der LDIFDE-Hilfe mit „LDIFDE.exe /?“ in der Eingabeaufforderung.
Für die Verwendung des Scripts kann ich keine Gewährleistung übernehmen und die Verwendung des Scripts erfolgt auf eigene Gefahr.
http://faq-o-matic.net/?p=604