Hier gibt es den Source Code um in einer Active Directory Struktur Kontakte anzulegen.
Was wird dafür benötigt?
Ihr müsst über die nötigen Rechte verfügen. Ihr braucht ein Rohdaten, wie immer aus einer Textdatei mit den gültigen Daten. Die Eingangsdatei prüfe ich nicht auf Fehler. Das muss vorab erfolgen, oder ihr programmiert diese Funktion aus und setzt diese dann vor die eigentliche Importfunktion.
LDIF steht für LDAP Data Interchange Format und ist das Format der Wahl wenn ihr in einer Active Directory Struktur Massenänderungen durchführen wollt.
Ein LDAP-Objekt wird durch mehrere LDIF-Zeilen beschrieben. Am Anfang steht immer der distinguished name dn, der die absolute Position im LDAP-Baum angibt. Es folgen Objektklassen, die definieren, welche Attribute zulässig oder vorgeschrieben sind.
Beispiel:
dn: dc=struktur, dc=de
objectclass: organization
objectclass: top
o: struktur
Es existieren zwei grundlegende LDIF Formate, LDIF Change und LDIF Change. Letzterer enthält die Änderungen an einem Objekt.
Ziel:
Das Script wandelt eine Excel Tabelle in das LDIF Format um, zum weiteren Import in eine Active Directory Struktur.
Private Sub Excel2LDIF_Click()
'LDIF Ausgabe aus Excelliste
Dim oAs, oUser As Object
Dim xlApp As Object
Dim zaehler
Dim ADSI As Object
Dim OUTeil(256) As String
'On Error Resume Next
Set xlApp = CreateObject(pfad_tabelle.Caption)
xlApp.Application.Visible = False
xlApp.Windows(1).Visible = False
On Error Resume Next
With CommonDialog1
.CancelError = True
.Flags = cdlOFNOverwritePrompt
.Filter = "Textdateien (*.LDIF)|*.LDIF"
.ShowSave
If .FileName <> "" Then
F = FreeFile
Open .FileName For Output As #F
End If
End With
' Ermittlung der Anzahl Datensaetze und Prüfung
Fehleranzahl = 0 ' Fehleranzahl
Kontrollfeld.Text = Kontrollfeld.Text & "Prüfung !!!" & vbCrLf
AnzahlDatensaetze = 2
While (xlApp.Worksheets(1).Range("A" & AnzahlDatensaetze).Value) <> ""
If Trim(xlApp.Worksheets(1).Range("C" & AnzahlDatensaetze).Value) = "" Then
Fehleranzahl = Fehleranzahl + 1
End If
If Trim(xlApp.Worksheets(1).Range("D" & AnzahlDatensaetze).Value) = "" Then
Fehleranzahl = Fehleranzahl + 1
End If
If Trim(xlApp.Worksheets(1).Range("E" & AnzahlDatensaetze).Value) = "" Then
Fehleranzahl = Fehleranzahl + 1
End If
If Trim(xlApp.Worksheets(1).Range("G" & AnzahlDatensaetze).Value) = "" Then
Fehleranzahl = Fehleranzahl + 1
End If
AnzahlDatensaetze = AnzahlDatensaetze + 1
Wend
If Fehleranzahl > 0 Then
Antwort = MsgBox("Anzahl fehlerhafter Datensätze: " & Fehleranzahl, vbYesNo + vbExclamation, "Wollen Sie eine LDIF - Ausgabe erstellen?")
If Antwort = vbOK Then
Else
Print #F, Kontrollfeld.Text
Close #F
Unload Form1
Exit Sub
xlApp.Application.Quit
End If
End If
' Start Bearbeitung
zaehler = 2
While (xlApp.Worksheets(1).Range("A" & zaehler).Value) <> ""
'Refresh der Anzeige
Form1.Refresh
Kontrollfeld.Refresh
'Schreibe LDIF
'Variablen belegen
'---------------------------------------------------------------------------
'Variable Werte aus Tabelle --------------------------------------------
Datum = Format$(Now, "yy.mm.dd")
Tag = Right(Datum, 2)
Monat = Mid(Datum, 4, 2)
Jahr = Left(Datum, 2)
Zeit = Format$(Now, "hh:nn:ss")
Min = Mid(Zeit, 4, 2)
St = Left(Zeit, 2)
If zaehler > 9 Then
employeeNumber = "E" & Jahr & Monat & Tag & St & zaehler & "1"
Else
employeeNumber = "E" & Jahr & Monat & Tag & St & Min & zaehler
End If
sn = Trim(xlApp.Worksheets(1).Range("C" & zaehler).Value) 'Nachname
givenName = Trim(xlApp.Worksheets(1).Range("D" & zaehler).Value) 'Vorname
' - berechneter Wert aus Tabelle ---------------------------------------
Print #F, "dn: cn=" & sn & " " & givenName & " " & employeeNumber & "," & "cn=Users,cn=XXXXXX"
Print #F, "cn: " & sn & " " & givenName & " " & employeeNumber
Print #F, "employeeNumber: " & employeeNumber
Print #F, "sn: " & Trim(xlApp.Worksheets(1).Range("C" & zaehler).Value)
Print #F, "givenName: " & Trim(xlApp.Worksheets(1).Range("D" & zaehler).Value)
' Prüfung auf Firma vorhanden wenn ja dann Excelliste wenn nein ="extern"
If UCase(Trim(xlApp.Worksheets(1).Range("H" & zaehler).Value)) = "" Then
Print #F, "Company: EXTERN 'Firma =xxx"
Else
Print #F, "Company: " & UCase(Trim(xlApp.Worksheets(1).Range("H" & zaehler).Value))
End If
Print #F, "Salutation: " & Trim(xlApp.Worksheets(1).Range("B" & zaehler).Value)
OU = UCase(Trim(xlApp.Worksheets(1).Range("E" & zaehler).Value))
K = 1
OUTeil(K) = UCase(Trim(xlApp.Worksheets(1).Range("E" & zaehler).Value)) '(1)
K = K + 1
While (InStrRev(OU, "-")) <> 0
Position = (InStrRev(OU, "-"))
OUTeil(K) = Left(OU, Position - 1)
OU = Left(OU, Position - 1)
K = K + 1
Wend
OU = "OU: ou="
For J = 1 To K - 1
If J = K - 1 Then
OU = OU & OUTeil(J)
Else
OU = OU & OUTeil(J) & ",ou="
End If
Next J
OU = OU & ",o=xxx,cn=xxx"
Print #F, OU
'Kostenstelle
Print #F, "Kostenstelle: " & UCase(Trim(xlApp.Worksheets(1).Range("G" & zaehler).Value)) 'Kostenstelle
' ADS User Typ auswerten -> Base OU bestimmen START
ADOU = UCase(Trim(xlApp.Worksheets(1).Range("K" & zaehler).Value))
Select Case ADOU
Case "1"
ADOU = "OU=Users,"
Case "2"
ADOU = "OU=Users,"
Case "3"
ADOU = "OU=Users,"
Case Else
ADOU = "OU=Users,"
End Select
Print #F, "ADOU: " & ADOU
Print #F, "AD: " & Trim(xlApp.Worksheets(1).Range("I" & zaehler).Value) 'AD Status
Print #F, vbCrLf
zaehler = zaehler + 1
Wend
Close #F
xlApp.Application.Quit
End Sub
Diesen Code verwendet ihr auf eigene Gefahr. Voraussetzung sind entsprechende Berechtigungen auf die AD Struktur. Ich übernehme keine Gewährleistung.
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Voreinstellungen erforderlich, die nicht vom Abonnenten oder Nutzer beantragt wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt.Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.