Mit VBS AD Benutzerdaten ändern

Gründe um ein Active Directory mittels Script mit Daten zu füttern gibt es ziemlich viele. Ob nun die Anschaffung einer IP Telefonanlage und die Anbindung derselben an das AD oder die einhergehende Änderung in der Telefonnummernzuordnung.
Oder der Umzug der Firma an einen neuen Standort und die damit verbundenen Anpassungen in den Kontaktdaten der Mitarbeiter.
Und gemeinsam haben all diese Gründe etwas entscheidendes ... einen ziemlich hohen Zeitbedarf um die Daten per Hand im AD zu ändern.

Dabei wurden all diese Daten schon einmal irgendwo erfasst. Und selbst wenn es nur in einer Textdatei oder Exceltabelle während der Planungsphase war. Und genau darum geht es in diesem Artikel. Wie bekomme ich nun diese Daten aus einer Textdatei bzw. Exceltabelle in das AD.

Wir nehmen einfach mal an, wir haben eine Exceltabelle mit 2 Spalten. Spalte 1 enthält den Benutzeranmeldenamen und Spalte 2 die neuen Telefonnummern.
In einer späteren Version dieses Scriptes wird die erste Zeile die LDAP Feldnamen enthalten und das AD entsprechend Variabel befühlbar sein.

Option Explicit
On Error resume Next
'Variablen
Dim objExcel, searchField, changedField, searchFields, changedFields, strDomainDN, ado, adoCmd, objUser
strDomainDN = "dc=domain,dc=de"

'Hilfsvariablen
Dim i, userList

'Verbindung zur Excel Tabelle aufbauen
Set objExcel = WScript.CreateObject("Excel.Application")
objExcel.Workbooks.Open ChooseFile( )
searchFields = objExcel.Worksheets(1).Cells(1,1).Value
changedFields = objExcel.Worksheets(1).Cells(1,2).Value

'Verbindung zur Datenbank aufbauen
Set ado = CreateObject("ADODB.Connection")
ado.Provider = "ADSDSOObject"
ado.Open "Active Directory Provider"
Set adoCmd = CreateObject("ADODB.Command")
adoCmd.ActiveConnection = ado


'Hilfsvariablen i auf 2. Zeile setzen wenn Tabellenkopf existiert
i = 2

Do While objExcel.Worksheets(1).Cells(i,1).Value <> ""
	searchField = objExcel.Worksheets(1).Cells(i,1).Value
	changedField = objExcel.Worksheets(1).Cells(i,2).Value
	adoCmd.CommandText = "<LDAP://" & strDomainDN & ">;(samAccountName=" & searchField & ");ADsPath;subtree"
	Set userList = adoCmd.Execute
	If (userList.RecordCount = 1) Then
		Err.Clear
		Set objUser = GetObject(userList.Fields("ADsPath"))
		If (Err.Number <>) Then
			WScript.Echo "ERROR: Benutzer " & searchField & " nicht gefunden!"
		End If
		Wscript.Echo objUser.fullname
		objUser.telephoneNumber = changedField
		objUser.SetInfo
		If (Err.Number <> 0) Then
			WScript.Echo "ERROR: Telefonnummer nicht gesetzt! Fehler: " & Err.Number
		End If
	Else
		WScript.Echo "ERROR: Benutzer " & searchField & " nicht gefunden!"
	End If
	
	
	i = i + 1
Loop


'Exceltabelle auf gespeichert setzen um Rückfrage zu vermeiden
objExcel.ActiveWorkbook.Saved = True
'Anwendung Excel Schließen
objExcel.Application.Quit

'Öffnen Dialog zur Auswahl einer Datei anzeigen
Function ChooseFile( )
    On Error Resume Next
    Dim objIE, strSelected
    ChooseFile = ""
    Set objIE = CreateObject( "InternetExplorer.Application" )
    objIE.visible = False
    objIE.Navigate( "about:blank" )
    Do Until objIE.ReadyState = 4
    Loop
    objIE.Document.Write "<HTML><BODY><INPUT ID=""FileSelect"" NAME=""FileSelect"" TYPE=""file""><BODY></HTML>"
    With objIE.Document.all.FileSelect
        .focus
        .click
        strSelected = .value
    End With
    objIE.Quit
    Set objIE = Nothing
    ChooseFile = strSelected
End Function