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