Jump to content

Eine bestimmte Gruppe deren Member auslesen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Howdi!

 

Habe ein VBScript gebastelt. Es ist eher umständlich und ich glaube es gibt eine Variante, die das ganze stark kürzen könnte. Aber nun erstmal mein Script, dann erkläre ich was ich genau als Ergebnis brauche:

 

domain="domain123"

group=InputBox("Welche Gruppe soll ausgelesen werden?")

Set obJGroup=GetObject("WinNT://" & domain & "/" & group)

For Each user In obJGroup.Members

myUser = user.Name

	If myUser = "" Then
	myUser = "KEIN EINTRAG!"
	End If

myDomain = "DC=domain123,DC=loc"

rsString = "<LDAP://" & myDomain & ">;(&(objectclass=user)(cn="&  myUser &"));mail"
Set rs=CreateObject("ADODB.recordset")
rs.Open rsString,"provider=AdsDSOObject"

rsString2 = "<LDAP://" & myDomain & ">;(&(objectclass=user)(cn="& myUser &"));DisplayName"
Set rs2=CreateObject("ADODB.recordset")
rs2.Open rsString2,"provider=AdsDSOObject"

            If rs.fields("mail") = "" Then
            mail = "KEIN EINTRAG!"

            Else
            mail = rs.fields("mail")
            End If

            If rs2.fields("DisplayName") = "" Then
            displayname = "KEIN EINTRAG!"

            Else
            displayname = rs2.fields("DisplayName")
            End If

output =  myUser & vbTab & displayname & vbTab & mail

strLog = "LOG.txt"
Set objX = CreateObject("Scripting.FileSystemObject")
Set objLog = objX.OpenTextFile(strLog,8,True,TristateUseDefault)
objLog.Write output & vbNewLine
objLog.Close
rs.Close
rs2.Close
Next

MsgBox group & " Mitglieder aufgelistet!"

WScript.Quit

 

So, das Script fragt welche Gruppe ich auslesen möchte (Es ist noch keine Fehlerüberprüfung eingebaut). Dann sucht er in der Domäne nach der Gruppe, und liest die Members in einer Schleife aus. Jetzt steht in der For Schleife, dass bei dem gelesenen Benutzer bestimmte Attribute (hier: Mail und Display Name) ausliest und in ein Log schreibt. Bevor er das macht, durchsucht er nochmals mit der Query Funktion das gesamte AD nach dem Benutzer, dessen Name ich aus der Gruppe ermittelt habe, und schreibt dann erst das Logging. Also doppelt gemoppelt denke ich.

 

Es funktioniert alles soweit, aber es ginge ja auch kürzer, ich habe das Beispiel gefunden (was in die For Schleife gehören sollte):

 

'Benutzer auflisten

For Each user in objGroup.Members
txt= user.Name & ";" & user.FullName
oErgebnis.WriteLine(txt)

Next

 

Das klappt auch, auch wenn ich nicht verstehe wenn ich das Objekt Gruppe habe, er mit user.* was anfangen kann. Egal, wichtig ist, gibt es eine Tabelle mit den AD Attributen (ausser ADSIEdit, die gehen nicht alle)? Denn wenn ich in die txt Variable folgendes reinschreiben möchte: "txt= user.Name & ";" & user.FullName & user.Mail" dann kommt eine Fehlermeldung weil das user.Mail nicht kennt. Aber die Mailadresse will ich in meinem Log haben.

 

help! :-)

Link zu diesem Kommentar

Moin,

 

dein eigenes Skript ist viel zu umständlich und wird in einer großen Umgebung unnötige Last erzeugen. Wichtig wäre aber erst mal zu wissen, was du überhaupt erreichen willst.

 

Eine For-Each-Next-Schleife kannst du über Arrays und Collections laufen lassen, wodurch sie alle "Kindobjekte" behandelt. Jedes Kindobjekt wird in deinem zweiten Beispiel der Objektvariablen "user" zugewiesen, sie enthält also (vereinfacht) jeweils den aktuellen Benutzer, auf den in objGroup.Members verwiesen wird. Daher musst du auch keinen Objektverweis mehr auf den User erzeugen, er ist ja bereits vorhanden.

 

So wie in der mittleren Zeile der Schleife kannst du dann die vorhandenen Attribute des Objekts auflisten. Da du mit dem WinNT-Provider arbeitest (was ich in der Regel nicht empfehle), musst du nach den dafür gültigen Attributen schauen. Der ADO-Zugriff ist hier völlig unnötig, vor allem gibt er aber auch nur die Felder zurück, die du anforderst (hier also nur DisplayName).

 

Für den LDAP-Provider kannst du dich für die Attribute hier orientieren:

 

faq-o-matic.net Active Directory: LDAP-Feldnamen

 

Eigentlich gehen schon alle Attribute, die ADSI Edit auflistet. Manche davon haben aber vielleicht keinen Wert und geben daher einen Fehler zurück. Aus diesem Grund solltest du bei Attributzugriffen immer eine eigene Fehlerbehandlung einbauen.

 

Gruß, Nils

Link zu diesem Kommentar

ich möchte das Skript starten, er soll mich dann nach der Gruppe fragen (den Namen) und sucht nach der Gruppe im AD, nimmt die User und erzeugt mir eine Liste mit den Gruppenmitgliedern, deren Namen und Mailadresse etc. (eben welches AD Attribut ich will) im txt Format.

 

ja, dachte ich mir auch, für große Umgebungen nicht sehr performant.

 

Wie müsste denn der LDAP Connect aussehen, damit ich eine beliebige Gruppe in meinem AD "finde"? Praktisch der Ersatz zum WinNT Provider: Set obJGroup=GetObject("WinNT://deutschland123/" & group)

 

Ohne das ich die ganzen OUs wissen muss, wo meine Gruppe sich befindet (cn=gruppe,ou=hallo,ou=hallo2,dc usw). In meiner InputBox frage ich nur, wie die Gruppe heisst und weiss in diesem Moment nicht, in welchen OUs er verborgen ist.

Link zu diesem Kommentar

Moin,

 

das würde ich umgekehrt machen. Eine ADO-Verbindung sucht per LDAP- oder SQL-Suchstring nach dem Objekt, dessen sAMAccountName der User eingegeben hat, und gibt den aDSPath zurück (= den kompletten LDAP-Pfad inkl. LDAP-Moniker). Mit diesem aDSPath verbindest du dich dann auf das Gruppenobjekt und liest per For-Each-Next die Mitgliedsliste aus.

 

Es geht dir ja vermutlich darum, das selbst per Skript zu lösen. Sonst wäre evtl. dies eine Lösung:

 

faq-o-matic.net Mitglieder einer AD-Gruppe mit Zusatzdaten ausgeben

 

Gruß, Nils

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...