45521
Jul 02, 2007, updated at Jul 03, 2007 (UTC)
17341
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 62795
Url: https://administrator.de/contentid/62795
Printed on: May 8, 2024 at 06:05 o'clock
10 Comments
Latest comment
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 ...