Jump to content

Mitglieder Verteilergruppe in Text-Datei ausgeben


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

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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

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...