Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Alle Benutzer einer Domäne auflisten und Unter-OUs

Frage Entwicklung VB for Applications

Mitglied: 45521

45521 (Level 1)

02.07.2007, aktualisiert 03.07.2007, 13571 Aufrufe, 10 Kommentare

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:

01.
ldap = "LDAP://" & ADIP & "/" & OUs & "," & DCs 
02.
 
03.
Set ons = GetObject("LDAP:") 
04.
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
Mitglied: damicka
02.07.2007 um 10:35 Uhr
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.
Bitte warten ..
Mitglied: 45521
02.07.2007 um 11:05 Uhr
Hi Micha,

danke, bringt mir aber leider gar nichts. Ich brauche alle Benutzer, weil ich die weiterverarbeiten will. Ich will die Benutzer in einem Select-Feld zur Auswahl stellen. Es ist nämlich so, daß jede Gruppe in unserer AD 3 Ansprechpartner haben, die dafür verantwortlich sind, wer in die Gruppe aufgenommen wird,... Diese sollen im Feld "Notes" eingetragen werden. Um nun den richtigen "Eintragenamen" zu erhalten will ich alle Benutzer aus der AD (so 4.000 in DE) auslesen und dann in das SELECT-Feld übernehmen.

Hab mir auch mal den Quelltext der Datei angeschaut - bringt mir leider auch nicht sooo viel. Der macht das ja auch nicht so, wie ich das in dem obigen Beispiel geschrieben habe....

Danke und Grüße,

Dirk
Bitte warten ..
Mitglied: bastla
02.07.2007 um 16:08 Uhr
Hallo Meanmachine!

Die folgende Skizze könnte als Basis für Dein Vorhaben dienen:
01.
strDelim = ";" 
02.
Set adoConnection = CreateObject("ADODB.Connection") 
03.
Set adoCommand = CreateObject("ADODB.Command") 
04.
adoConnection.Provider = "ADsDSOOBject" 
05.
adoConnection.Open "Active Directory Provider" 
06.
Set adoCommand.ActiveConnection = adoConnection 
07.
 
08.
Set objRootDSE = GetObject("LDAP://RootDSE") 
09.
strDNSDomain = objRootDSE.Get("DefaultNamingContext") 
10.
strFilter = "(objectClass=user)" 
11.
 
12.
strQuery = "<LDAP://" & strDNSDomain & ">;" & strFilter _ 
13.
    & ";distinguishedName,sAMAccountName,Name,givenName,sn;subtree" 
14.
 
15.
adoCommand.CommandText = strQuery 
16.
 
17.
Set adoRecordSet = adoCommand.Execute 
18.
strUserList = "" 
19.
Do Until adoRecordset.EOF 
20.
	If Right(adoRecordSet.Fields("sAMAccountName"), 1) <> "$" Then 
21.
		If strUserList <> "" Then  
22.
			strUserList = strUserList & strDelim & adoRecordSet.Fields("sAMAccountName") 
23.
		Else 
24.
			strUserList = adoRecordSet.Fields("sAMAccountName") 
25.
		End If 
26.
	End If 
27.
    adoRecordSet.MoveNext 
28.
Loop 
29.
'WScript.Echo strUserList 
30.
aUsers = Split(strUserList, strDelim) 
31.
For i = 0 To UBound(aUsers) 
32.
	'WScript.Echo aUsers(i) 
33.
Next
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
Bitte warten ..
Mitglied: 45521
02.07.2007 um 18:39 Uhr
Hi bastla,

wie schon so oft: viiiiieeeeelen Dank!

Werde das morgen im Geschäft gleich mal testen...

Danke und Grüße,

Marc
Bitte warten ..
Mitglied: bastla
02.07.2007 um 18:46 Uhr
Hallo Meanmachine!

Immer wieder gerne.

Noch ein Hinweis zum Testen: Wenn Du das Script über CMD aufrufst, also etwa
01.
cscript //nologo ListAllADUsers.vbs > AllADUsers.txt
könntest Du auch das eine oder andere WScript.Echo ausführen lassen ...

Grüße
bastla
Bitte warten ..
Mitglied: 45521
03.07.2007 um 10:40 Uhr
Hi,

ich hab dein Beispiel mal ausprobiert, finde aber nirgends, wie ich das machen kann, wenn ich mich authentifzieren muß (ADS_SECURE_AUTHENTICATION)...

Dann habe ich es mit dem SQL von ADODB versucht, aber da bin ich ja in Rente bis es mir da 4.000 Benutzer ausgelesen hat. Außerdem habe ich gerade noch ein anderes "Problem". Ich soll schauen, ob eine Gruppen in einem der Subtrees in einer best. OU besteht. Die Dokumentation ist so schlecht, ich finde weder, wo ich die gefundenen Datensätze zählen kann, noch, wie ich ein Update der Informationen einer Gruppe darüber absetze,...

Kann ich nicht einfach mit folgendem:

[code]
On Error Resume Next
ldap = "LDAP://" & ADIP & "/" & OUs & "," & DCs
Set ons = nothing
Set oContainer = nothing
Set ons = GetObject("LDAP:")
Set ocontainer = ons.OpenDSObject(ldap, user, pw, ADS_SECURE_AUTHENTICATION)

ocontainer.filter=array("group")
[/code]

arbeiten und rausfinden, wo die gesuchte Gruppe liegt (müßte den "Pfad" zur Gruppe dann ja auch irgendwie rausbekommen, um sie ändern zu können - macht ja einen Unterschied, ob die Gruppe jetzt direkt in DE, in DE/ABC oder in DE/DEF liegt).

Kann ich in das von mir genannte Beispiel nicht einfach irgendwie subtree einbauen? Hab's schon bei filter = array("group",subtree) versucht, aber das will er irgendwie nicht....

Danke und Grüße,

Marc
Bitte warten ..
Mitglied: bastla
03.07.2007 um 11:54 Uhr
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 ...
Bitte warten ..
Mitglied: 45521
03.07.2007 um 12:06 Uhr
Hi bastla,

danke! Leider kann ich das Teil nicht installieren - hab keine Admin-Rechte auf meinen Desktop (bin ja nur ein Studentenkopf der da sein Praktikum macht und bekomme nur die benötigten Rechte).

Werde mal weitersuchen, vielleicht meldet sich ja noch jemand...

Danke und Grüße,

Marc
Bitte warten ..
Mitglied: 45521
03.07.2007 um 12:31 Uhr
Hi bastla,

ich glaube, ich wurde fündig. MS macht es so, daß ich zuerst alle, bei denen sind's Computer, suchen über ADODB und dann, wenn die Schleife mit allen gefundenen Namen durchlaufen wird, bauen sie mit OpenDSObject eine Verbindung dazu auf (bzw. ich würde dann halt dje jeweilige Gruppe wählen wenn vorhanden und anpassen).

Werde das mal probieren. Mal schaun, wie schnell das geht,... ;)

Grüße,

Marc
Bitte warten ..
Mitglied: 45521
03.07.2007 um 12:49 Uhr
Hier mal, wie ich es jetzt gemacht habe:



On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2
Const ADS_SECURE_AUTHENTICATION = 1
Const ADS_USE_ENCRYPTION = 2
Const ADS_PROPERTY_UPDATE = 2




Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Properties("User ID") = "USER"
objConnection.Properties("Password") = "PASSWORT"
objConnection.Properties("Encrypt Password") = FALSE
objConnection.Properties("ADSI Flag") = 1

objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
'objCommand.Properties("Sort On") = "Name"

objCommand.CommandText = _
"SELECT distinguishedName FROM 'LDAP://11.11.11.11/ou=bla,ou=DE,dc=dom,dc=ain' WHERE objectCategory='group'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst

user = "USER"
pw = "PASSWORT"

Do Until objRecordSet.EOF
'strComputer =
ldap = "LDAP://11.11.11.11/" & objRecordSet.Fields("distinguishedName").Value

Set ons = GetObject("LDAP:")
Set ocontainer = ons.OpenDSObject(ldap, user, pw, ADS_SECURE_AUTHENTICATION)
ocontainer.Put "info","Test1"
ocontainer.PutEx ADS_PROPERTY_UPDATE, "description", Array("JUHU")
ocontainer.SetInfo

objRecordSet.MoveNext
Loop

MSGBOX "Fertsch"

Lasse das Thema mal noch offen, vielleicht will noch jemand was ergänzen. Funktionieren tut's aber definitiv...
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Sicherheits-Tools
gelöst 2 faktor authentifizierung windows domäne nur bestimmte benutzer (7)

Frage von kal10bach zum Thema Sicherheits-Tools ...

Windows Server
gelöst Ausnahmeregeln in GPOs für bestimmte Benutzer in der Domäne priorisieren aber wie? (3)

Frage von ITCrowdSupporter zum Thema Windows Server ...

Exchange Server
gelöst Kalenderberechtigung aller Benutzer in einer Domäne zurücksetzen (3)

Frage von Type02 zum Thema Exchange Server ...

Windows Netzwerk
USB-Gerät ins Netzwerk (Domäne) einbinden (3)

Frage von griss0r zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...