Daniel84 10 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hallo, ich brauche ein Script für das Auslesen von Verteilergruppen, genauer gesagt will ich nur die Mailadressen in einer Text Datei ausgeben. Habe das Forum bereits durchforstet und auch schon div. Tipps verfolgt. Aber leider bisher erfolglos. Hat einer von Euch Tipps wie man solche Scripte am besten aufbaut, bin für alles dankbar, Danke im voraus Damiel Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hallo Daniel84, Dies könnte als Startpunkt evtl. nützlich sein... Microsoft Corporation Unter Active Directory -->Searching Active Directory -->Groups On Error Resume Next Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE objCommand.CommandText = _ "SELECT Name FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='group'" & _ "AND groupType = 2" Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF Wscript.Echo objRecordSet.Fields("Name").Value objRecordSet.MoveNext Loop Unter Active Directory -->Groups--> Lists general properties of a group.. On Error Resume Next Const ADS_GROUP_TYPE_GLOBAL_GROUP = &h2 Const ADS_GROUP_TYPE_LOCAL_GROUP = &h4 Const ADS_GROUP_TYPE_UNIVERSAL_GROUP = &h8 Const ADS_GROUP_TYPE_SECURITY_ENABLED = &h80000000 Set objGroup = GetObject _ ("LDAP://cn=Scientists,ou=R&D,dc=NA,dc=fabrikam,dc=com") WScript.Echo "Name: " & objGroup.Name WScript.Echo "SAM Account Name: " & objGroup.SAMAccountName WScript.Echo "Mail: " & objGroup.Mail WScript.Echo "Info: " & objGroup.Info intGroupType = objGroup.GroupType If intGroupType AND ADS_GROUP_TYPE_LOCAL_GROUP Then WScript.Echo "Group scope: Domain local" ElseIf intGroupType AND ADS_GROUP_TYPE_GLOBAL_GROUP Then WScript.Echo "Group scope: Global" ElseIf intGroupType AND ADS_GROUP_TYPE_UNIVERSAL_GROUP Then WScript.Echo "Group scope: Universal" Else WScript.Echo "Group scope: Unknown" End If If intGroupType AND ADS_GROUP_TYPE_SECURITY_ENABLED Then WScript.Echo "Group type: Security group" Else WScript.Echo "Group type: Distribution group" End If For Each strValue in objGroup.Description WScript.Echo "Description: " & strValue Next Gruß Dirk Zitieren Link zu diesem Kommentar
Daniel84 10 Geschrieben 15. Februar 2009 Autor Melden Teilen Geschrieben 15. Februar 2009 Hi Dirk, danke für deine Antwort und die Links. Hab mir die Scripte und die technet Seiten mal angeschaut. Bei technet hab ich noch folgendes Beispielscript gefunden. On Error Resume Next Set objGroup = GetObject _ ("LDAP://cn=Gruppenname,ou=test,dc=testdom,dc=lcl") objGroup.GetInfo arrMemberOf = objGroup.GetEx("member") WScript.Echo "Members:" For Each strMember in arrMemberOf WScript.echo strMember Next Als Augabe erhalte ich "CN=Meier Hans, OU=test,dc=testdom,dc=lcl" Leider habe ich keine Hinweise gefunden, wie nur SMTP Adresse [mail] ausgegeben wird. Hast du noch einen Hinweis für mich? merci, Daniel Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hallo Daniel, was brauchst du denn nun ganz genau? Die Mail Adresse des Verteilers, oder die Mail Adressen der Mitglieder des Verteilers? Oder oder oder... Für ersteres ist die Lösung m.E. im zweiten Script komplett vorhanden.. Wie hast du dir dein Script denn vorgestellt und was soll es genau machen? Gruß Dirk Zitieren Link zu diesem Kommentar
Daniel84 10 Geschrieben 15. Februar 2009 Autor Melden Teilen Geschrieben 15. Februar 2009 Hallo Dirk, ich brauche die Mailadressen der Mitglieder von einer Verteilergruppe. Ich will im Script über den LDAP Pfad (CN=) eine Verteilergruppe angeben und die SMTP Adressen der Mitglieder dieser Gruppe in einer Text Datei ausgeben. Gruß Daniel Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hi Daniel, muß es VBScript sein oder reichen auch andere Möglichkeiten? Mit CSVDE sollte es eigentlich auch klappen, im Prinzip in der Form: csvde -d "ou=Verteilergruppen,dc=domain,dc=tld" -l "displayName,mail" -f C:\emails.txt Attribute von Verteilergruppen findest Du beispielsweise hier: Exchange-Related Attributes of Query-Based Distribution Group Objects [EDIT] Ok, da kam in der Zwischenzeit eine Veränderung Deiner Anforderungen... In dem Fall würde ich es eher mit den DSTools machen, etwa so: C:\> dsget group "CN=Gruppe,OU=ou,DC=domain,DC=tld" -members -expand | dsget user -samid -email [/EDIT] Viele Grüße olc Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Ja dann.... unter Active Directory -->User Accounts -->Retrieving information... On Error Resume Next Set objUser = GetObject _ ("LDAP://cn=myerken,ou=management,dc=fabrikam,dc=com") WScript.Echo "First Name: " & objUser.givenName WScript.Echo "Initials: " & objUser.initials WScript.Echo "Last Name: " & objUser.sn WScript.Echo "Display Name: " & objUser.displayName WScript.Echo "Office: " & _ objUser.physicalDeliveryOfficeName WScript.Echo "Telephone Number: " & objUser.telephoneNumber WScript.Echo "Email: " & objUser.mail WScript.Echo "Home Page: " & For Each strValue in objUser.description WScript.Echo "Description: " & strValue Next For Each strValue in objUser.otherTelephone WScript.Echo "Other Telephone: " & strValue Next For Each strValue in objUser.url WScript.Echo "URL: " & strValue Next objUser.mail Du musst also den Eingangsstring für eine neue LDAP Abfrage benutzen. Mit dieser bekommst du dann die MAil Adresse.. Gruß Dirk Zitieren Link zu diesem Kommentar
Daniel84 10 Geschrieben 15. Februar 2009 Autor Melden Teilen Geschrieben 15. Februar 2009 Servus olc, C:\> dsget group "CN=Gruppe,OU=ou,DC=domain,DC=tld" -members -expand | dsget user -samid -email Perfekt, genau was ich wollte. Eine Frage noch; kann man die Ausgabe noch optimieren, sodass "samid", "email" und "dsget war erfolgreich" nicht in die *.txt Datei geschrieben werden? merci Daniel Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hi Daniel, soweit ich weiß geht das nicht direkt. Aber Du könntest die Ausgabe über FINDSTR oder ähnliches umleiten und die Zeilen dann "manuell" ausfiltern. Vielleicht schaust Du Dir auch einmal AdFind an - das Programm bietet eine ganze Menge zusätzlicher Optionen, vielleicht ist hier etwas zur Anpassung der Ausgabe mit dabei. Viele Grüße olc Zitieren Link zu diesem Kommentar
Daniel84 10 Geschrieben 15. Februar 2009 Autor Melden Teilen Geschrieben 15. Februar 2009 Servus, danke nochmal für deine Hilfe, das Tool werde ich mir anschauen. Eine Frage habe ich noch ;) Kann man in die Ausgabe auch Kontakt Objekte aus der Verteilergruppe mit einschließen (deren SMTP Adresse)? merci Daniel Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hi Daniel, ich würde es einfach mit FINDSTR erledigen, dann sparst Du Dir den Aufwand. In etwa so: C:\> dsget group "CN=Gruppe,OU=ou,DC=domain,DC=tld" -members -expand | dsget user -samid -email | FINDSTR /V /I "samid dsget" Kontakte mußt Du extra auslesen, Du kannst jedoch die selbe Kommandozeile nutzen, wenn Du anstatt der Benutzer Kontakte ausliest. In etwa so: C:\> dsget group "CN=Gruppe,OU=ou,DC=domain,DC=tld" -members -expand | dsget contact -cn -email | FINDSTR /V /I "cn dsget" Weitere Hilfe zu den Möglichkeiten gibt Dir: C:\> dsquery /? C:\> dsget /? C:\> findstr /? ;) Viele Grüße olc Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 soweit ich weiß geht das nicht direkt. Aber Du könntest die Ausgabe über FINDSTR oder ähnliches umleiten und die Zeilen dann "manuell" ausfiltern. Ich hätte da noch ein vbs für im Angebot ;) Wenn der dsget in eine Batch(Hier input.bat) ausgelagert wird, dann ließe sich das mit dem folgenden Script lösen.. Dabei wird die Ausgabe vom StdOut erstmal in eine temporäre Datei geschrieben. Dann wird diese Datei(toutput) geparst und nur das gewünschte in eine neue Textdatei(output) geschrieben... toutput = "C:\output.txt" output = "C:\output1.txt" 'inputdatei = "C:\input.bat" Set oShell = CreateObject("WScript.Shell") Set oFSO = CreateObject("Scripting.FileSystemObject") If Not oFSO.FileExists(toutput) Then Set tLogdatei = oFSO.CreateTextFile(toutput, True) Else oFSO.DeleteFile(toutput) Set tLogdatei = oFSO.CreateTextFile(toutput, True) End If Set oExec = oShell.Exec("C:\input.bat") input = "" Do While True If Not oExec.StdOut.AtEndOfStream Then input = input & oExec.StdOut.ReadAll MsgBox input If InStr(input,"dsget succeeded") <> 0 Then Exit Do End If WScript.Sleep 100 Loop tLogdatei.WriteLine ""& input &"" tLogdatei.Close If Not oFSO.FileExists(output) Then Set Logdatei = oFSO.CreateTextFile(output, True) Else Set Logdatei = oFSO.OpenTextFile(output, 8, 0) End If Set tLogdatei = oFSO.OpenTextFile(toutput, 1) Do While not tLogdatei.AtEndofStream tstring = tLogdatei.ReadLine MsgBox tstring If InStr (tstring, "dsget") >0 Or InStr(tstring, "samid") >0 Or tstring = "" Then 'Mach nix Else Logdatei.WriteLine(tstring) End If Loop Logdatei.Close Set tLogdatei = Nothing Set Logdatei = Nothing Set oFSO = Nothing Hmm... Da war ich wohl zu langsam... Gruß Dirk Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hi Dirk, sieht gut aus - hilft sicher irgendwann einmal weiter. :) In dem konkreten Fall würde ich jedoch eher FINDSTR nehmen, das ist recht einfach und vor allen Dingen kürzer. ;) Viele Grüße olc Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Hi olc, 2 Zeilen sind immer besser als 43. Da geb' ich dir vollkommen Recht :) Gruß Dirk Zitieren Link zu diesem Kommentar
olc 18 Geschrieben 15. Februar 2009 Melden Teilen Geschrieben 15. Februar 2009 Off-Topic: ...aber Du bekommst den Preis für die ausgeklügelteste Variante. :)Viele Grüßeolc 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.