Active Directory mit Excel auslesen

03. April 2008 von Werner Mager · Gelesen: 3797 · heute: 1

Dieser Artikel beschäftigt sich damit, wie man in einer Microsoft Windows Domäne Gruppen oder Logins auflösen kann um z.B. zu prüfen, wer Mitglied in einer Gruppe ist. Der komfortabelste Weg, den ich gefunden habe, ist aus Microsoft Excel heraus.

Das mächtigste Werkzeug für den Zugriff auf das Active Directory ist sicherlich das Programm “Active Directory Users and Computers” aus den administrativen Tools (kann einfach bei Microsoft heruntergeladen werden und läuft auch auf XP-Clients). Dieses Tool kann oder möchte man jedoch nicht immer einfach so beim Kunden installieren. Eine einfache Alternative ist die Suche im Active Directory, die jeder Client von Haus aus kann. Man findet sie über Start > Search > For People.

Hiermit können sowohl Gruppen als auch Benutzer gefunden werden. Man kann sowohl nach dem Namen oder auch dem W2K-Login suchen.

Eine komfortable Liste erhält man dabei aber trotzdem nicht. Daher habe ich ein bisschen mit VBA-Makros experimentiert und mir schließlich ein Excel-Blatt erstellt, über dass ich zum einen eine Gruppe auslesen und zum anderen auch eine Liste von Logins in Namen auflösen kann.

Um die Funktion des Active Directories nutzen zu können, muss im VBA-Editor ein Verweis auf die “Actvie DS Type Library” eingebunden werden:

Nun stehen direkt die Objekte für den Zugriff auf das Active Directory zur Verfügung, z.B. kann mit folgenden 2 Zeilen die Gruppe “Administrators” geöffnet werden:

Dim grp As ActiveDs.IADsGroup
Set grp = GetObject("WinNT://sternico.local/Administrators,group")

Die Mitglieder eine Gruppe lassen sich wie folgt auslesen:

Dim member As ActiveDs.IADsUser
For Each member In grp.Members
  member.GetInfo
  debug.print "Login:" & member.Name
  debug.print "Name:" & member.FullName
Next

Und einen User (in diesem Fall mich ;) ) findet man anhand seines W2K-Logins durch:

Dim user As ActiveDs.IADsUser
Set user = GetObject(”WinNT://sternico.local/wm,user”)

Das ganze habe ich nun noch in ein Excel-Blatt eingebunden, so dass man bequem zum einen die Mitglieder einer Gruppe erhalten und zum anderen eine Liste von Logins auflösen kann. Da sich diese Seite als äußerst nützlich erwiesen hat und mir schon manchen Anruf bei der IT-Hotline unserer Kunden erspart hat, stelle ich sie auch gleich an dieser Stelle zur Verfügung:

ActiveDirectory.xls

15 Antworten zu “Active Directory mit Excel auslesen”

  1. Andre sagt:

    Danke du hast meinen Tag gerettet

  2. Werner Mager sagt:

    :) Freut mich. Wenigstens ein kleiner Höhepunkt an einem Tag, an dem sonst irgendwie nix klappen will…

  3. beginner sagt:

    Das ist sehr hilfreich, vielen Dank!
    Wie immer, kommt der Appetit mit dem Essen.
    Ich möchte das VBA gerne erweitern, so dass es mir die Mail-Adressen zurückgibt. Ich habe bereits versucht, anstelle von user.FullName user.MailAddress auszuwählen, allerdings ohne Erfolg.
    Kann mir jemand auf die Sprünge helfen?
    Besten Dank schon jetzt.

  4. Werner Mager sagt:

    Die Email steht über den WinNT nicht zur Verfügung. Hier muß man statt dessen Ldap verwenden:

    Function GetEmail(login)
     
        Set rootDSE = GetObject("LDAP://rootDSE")
        Set Connection = CreateObject("ADODB.Connection")
        Connection.Provider = "ADsDSOObject"
        Connection.Open
     
        Set cmd = CreateObject("ADODB.Command")
        Set cmd.ActiveConnection = Connection
        cmd.CommandText = "SELECT mail FROM 'LDAP://" & rootDSE.Get("defaultNamingContext") & "' " & " WHERE objectCategory='person' AND sAMAccountName='" & login & "'"
     
        Set result = cmd.Execute
        If (Not (result.EOF)) Then
            If Not (IsNull(result.Fields("mail"))) Then
                Debug.Print (result.Fields("mail"))
                GetEmail = result.Fields("mail")
            End If
        End If
     
        result.Close
        Connection.Close
     
    End Function
  5. Werner Mager sagt:

    Und hier auch noch mal nen Link zu einer Seite, auf der die Felder im Ldap erläutert sind:
    http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm

  6. Anfänger sagt:

    Gefällt mir.

    Eine Frage zu der User Abfrage:
    Welche Änderung müsste man im script vornehmen wen man anstelle des Users (Login) den ‘DisplayName’ (z.B Mustermann, Max) als Suche eingeben möchte ? Also der umgekehrte weg.

    Danke.

  7. Werner Mager sagt:

    Also bei der Ldap-Variante müßte man nur das Query-Command anpassen. Z.B.:

     cmd.CommandText = "SELECT mail FROM 'LDAP://" & rootDSE.Get("defaultNamingContext") & "' " & " WHERE objectCategory='person' AND dn='" & displayName & "'"
  8. beginner sagt:

    Ich habe noch ein Excel Plugin gefunden, welches eigentlich alle Wünsche abdeckt. Es heisst ExcelLdapSearch und ist bei source forge zu finden. Damit durchsucht man vorwärts und rückwärts und da es OpenSource ist, kann und darf man auch selber noch Ergänzungen vornehmen. Ich habe damit alle Anforderungen abdecken können.
    Trotzdem herzlichen Dank für die tolle Unterstützung. Ich wünsche eine gute Zeit.

  9. Anfänger sagt:

    Supi, werde es bei Gelegenheit testen.

    Vielen Dank für eure Hilfe.

    MfG
    A

  10. Anfänger sagt:

    @beginner zu ExcelLdapSearch
    in welchem format hast Du die Parameter in der .ini eingetragen ?

    binddn=?
    bindpw=?
    basedn=?

    Danke.

  11. beginner sagt:

    @Anfänger

    ich habe es so eingetragen:

    bindn: AD-User
    bindpw: Passwort(AD-User)
    basedn=DC=ch,DC=xxxxxxx,DC=net (abhängig davon wie Dein AD aussieht)

    Gerne und viel Erfolg!

  12. Anfänger sagt:

    ok, das mit dem der basedn hatte ich auch schon so, aber es lag wohl an der fehlenden binddn und bindpw. Ich dachte es müsste auch ohne gehen, da es bei anderen ldab scripte die ich mal benutzt habe nie nötig war.

    vielen Dank.
    Grüße

  13. beginner sagt:

    Ja klar, wenn Du “andere” ldap scripte startest, z.B. aus dem CMD-Fenster, dann hat das CMD-Fenster deine Windows-(Domänen) Userrechte und erlaubt Dir auf das AD zuzugreifen. Kaum ein Admin erlaubt den anonymen Zugriff auf das AD…

    Gruss und schönen Nachmittag.

  14. Tester sagt:

    Genau das suche ich …
    Nur - ich benötige die Informationen zum Office und die Telefonnummer.
    Das muss ich doch nicht über LDAP machen, oder??

    Was muss ich dafür einsetzen?

    Danke!!

  15. twinc. sagt:

    Das interessiert mich auch brennend. Damit könnte ich mir das manuelle ziehen von Listen ersparen.

Hinterlasse eine Antwort