blob 10 Geschrieben 17. Dezember 2008 Melden Teilen Geschrieben 17. Dezember 2008 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! :-) Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. Dezember 2008 Melden Teilen Geschrieben 17. Dezember 2008 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 Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 17. Dezember 2008 Autor Melden Teilen Geschrieben 17. Dezember 2008 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. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. Dezember 2008 Melden Teilen Geschrieben 17. Dezember 2008 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 Zitieren Link zu diesem Kommentar
blob 10 Geschrieben 19. Dezember 2008 Autor Melden Teilen Geschrieben 19. Dezember 2008 ja per skript, ich benötige es öfters aber von verschiedenen gruppen. deswegen soll die inputbox mit dem gruppennamen gefüllt werden, ohne dass ich im AD mir den Pfad raussuchen muss. danke für den denkanstoß. ich werde den winnt Provider im Skript elliminieren und LDAP nutzen :-) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.