45521
02.07.2007, aktualisiert am 03.07.2007
17591
10
0
Alle Benutzer einer Domäne auflisten und Unter-OUs
Hallo,
ich hätte mal (wieder) gerne eine Problem ;)
Und zwar will ich per VBScript in der Active Directory alle Benutzer der Domäne DE auslesen. In der Domäne befinden sich noch etliche OUs,.. bräuchte alle Benutzer, ob die nun direkt in DE liegen oder in DE/Standort/Users/,... Die genaue Anzahl an OUs bzw. deren Namen sind mir auch nicht bekannt, sonst könnte ich das ja so lösen.
Kann mir da bitte jemand helfen? Bin am Verzweifeln. In Google findet man (fast) alles, aber dazu wurde ich bisher nicht fündig.
Achso: In meinem bisherigen Script baue ich die Verbindung zum LDAP so auf:
Also nicht mit dem ADODB.Connect, wäre schön, wenn es auch ohne das ginge, da ich sonst ja entweder doppelt gemoppelt eine Verbindung aufbauen würde oder mein komplettes Script umbauen muß. Btw. (falls jemand Zeit und Lust hat): Wo liegen denn die Unterschiede zwischen "meiner" Art und der Adodb-Connect?
Danke und Grüße,
Marc
ich hätte mal (wieder) gerne eine Problem ;)
Und zwar will ich per VBScript in der Active Directory alle Benutzer der Domäne DE auslesen. In der Domäne befinden sich noch etliche OUs,.. bräuchte alle Benutzer, ob die nun direkt in DE liegen oder in DE/Standort/Users/,... Die genaue Anzahl an OUs bzw. deren Namen sind mir auch nicht bekannt, sonst könnte ich das ja so lösen.
Kann mir da bitte jemand helfen? Bin am Verzweifeln. In Google findet man (fast) alles, aber dazu wurde ich bisher nicht fündig.
Achso: In meinem bisherigen Script baue ich die Verbindung zum LDAP so auf:
ldap = "LDAP://" & ADIP & "/" & OUs & "," & DCs
Set ons = GetObject("LDAP:")
Set ocontainer = ons.OpenDSObject(ldap, user, pw, ADS_SECURE_AUTHENTICATION)
Also nicht mit dem ADODB.Connect, wäre schön, wenn es auch ohne das ginge, da ich sonst ja entweder doppelt gemoppelt eine Verbindung aufbauen würde oder mein komplettes Script umbauen muß. Btw. (falls jemand Zeit und Lust hat): Wo liegen denn die Unterschiede zwischen "meiner" Art und der Adodb-Connect?
Danke und Grüße,
Marc
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62795
Url: https://administrator.de/contentid/62795
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo ,
sehr komplexe Abfragen kannst du mit carlos.hta machen.
Hierbei kannst du auch aussuchen was genau du dir ausgeben lassen möchtest.
Nachteil ist das es passieren kann das keine Verbindung aufgebaut wird.
Dann einfach mal das Konto prüfen mit dem du zugreifst. (Current User der Arbeitsstation).
Gruß
Micha
PS: Richtig schön kann man sich das dann über ASP ausgeben lassen.
sehr komplexe Abfragen kannst du mit carlos.hta machen.
Hierbei kannst du auch aussuchen was genau du dir ausgeben lassen möchtest.
Nachteil ist das es passieren kann das keine Verbindung aufgebaut wird.
Dann einfach mal das Konto prüfen mit dem du zugreifst. (Current User der Arbeitsstation).
Gruß
Micha
PS: Richtig schön kann man sich das dann über ASP ausgeben lassen.
Hallo Meanmachine!
Die folgende Skizze könnte als Basis für Dein Vorhaben dienen:
Da Du nicht genau ausgeführt hast, welchen "Namen" Du benötigst, enthält die Abfrage mit "distinguishedName,sAMAccountName,Name,givenName,sn" eine Sammlung von Möglichkeiten.
Die Schleife für die Auswertung schreibt zunächst alle gefundenen (Anmelde-)Namen (außer den Computernamen mit "$" am Ende) in einen String und zerteilt diesen dann in ein Array - bei Deiner Menge an Benutzern habe ich die jeweilige Test-Ausgabe lieber auskommentiert ...
Grüße
bastla
Die folgende Skizze könnte als Basis für Dein Vorhaben dienen:
strDelim = ";"
Set adoConnection = CreateObject("ADODB.Connection")
Set adoCommand = CreateObject("ADODB.Command")
adoConnection.Provider = "ADsDSOOBject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("DefaultNamingContext")
strFilter = "(objectClass=user)"
strQuery = "<LDAP://" & strDNSDomain & ">;" & strFilter _
& ";distinguishedName,sAMAccountName,Name,givenName,sn;subtree"
adoCommand.CommandText = strQuery
Set adoRecordSet = adoCommand.Execute
strUserList = ""
Do Until adoRecordset.EOF
If Right(adoRecordSet.Fields("sAMAccountName"), 1) <> "$" Then
If strUserList <> "" Then
strUserList = strUserList & strDelim & adoRecordSet.Fields("sAMAccountName")
Else
strUserList = adoRecordSet.Fields("sAMAccountName")
End If
End If
adoRecordSet.MoveNext
Loop
'WScript.Echo strUserList
aUsers = Split(strUserList, strDelim)
For i = 0 To UBound(aUsers)
'WScript.Echo aUsers(i)
Next
Die Schleife für die Auswertung schreibt zunächst alle gefundenen (Anmelde-)Namen (außer den Computernamen mit "$" am Ende) in einen String und zerteilt diesen dann in ein Array - bei Deiner Menge an Benutzern habe ich die jeweilige Test-Ausgabe lieber auskommentiert ...
Grüße
bastla
Hallo Meanmachine!
Um etwas Überblick zu gewinnen, könntest Du Dir vielleicht den Softerra LDAP Browser ansehen.
Deinen Wunsch, ohne "ADODB" auszukommen, hatte ich leider völlig überlesen ...
Grüße
bastla
P.S.: Für mehr reicht im Moment meine Zeit nicht ...
Um etwas Überblick zu gewinnen, könntest Du Dir vielleicht den Softerra LDAP Browser ansehen.
Deinen Wunsch, ohne "ADODB" auszukommen, hatte ich leider völlig überlesen ...
Grüße
bastla
P.S.: Für mehr reicht im Moment meine Zeit nicht ...