60376
22.01.2008, aktualisiert am 25.01.2008
11213
9
0
ActiveDirectory Gruppen-User Zuordnung
Hallo Leute, bin sehr unerfahren was VB-Programmierung angeht und habe deshalb eine (vielleicht sehr dumme) Frage.
Und zwar brauch ich ein Script, welches aus dem ActiveDirectory die Gruppen und User ausliest und Datenbankmäßig ausgibt, also quasi
"Gruppe1,User1"
"Gruppe1,User2"
"Gruppe2,User1"
"Gruppe2,User3"
usw...
von VB habich leider nicht viel Ahnung, deshalb dachte ich ihr könnt mir vielleicht helfen?
Benutzt werden sollen die Befehle dsquery und dsget, aber vielleicht geht das auch anders?
Danke schonmal
Und zwar brauch ich ein Script, welches aus dem ActiveDirectory die Gruppen und User ausliest und Datenbankmäßig ausgibt, also quasi
"Gruppe1,User1"
"Gruppe1,User2"
"Gruppe2,User1"
"Gruppe2,User3"
usw...
von VB habich leider nicht viel Ahnung, deshalb dachte ich ihr könnt mir vielleicht helfen?
Benutzt werden sollen die Befehle dsquery und dsget, aber vielleicht geht das auch anders?
Danke schonmal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 78838
Url: https://administrator.de/contentid/78838
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo dnbCommander!
Eine VBS-Lösung (unter starker Anlehnung an diese "Scripting Guy"-Kolumne) könnte so aussehen:
Könntest Du dann bitte einen Deiner Beiträge zu diesem Thema (mit dem Hinweis auf den anderen Beitrag) als "Wie kann ich einen Beitrag als gelöst markieren?" kennzeichnen?
Grüße
bastla
Eine VBS-Lösung (unter starker Anlehnung an diese "Scripting Guy"-Kolumne) könnte so aussehen:
Const strDomain = "firma.de"
Const strListFile = "D:\Gruppenliste.txt"
Const strDelim = ","
Set objListFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strListFile, 2, True)
Set colGroups = GetObject("WinNT://" & strDomain)
colGroups.Filter = Array("Group")
For Each objGroup In colGroups
strGroup = objGroup.Name
For Each objUser in objGroup.Members
strUserName = objUser.Name
If Right(strUserName, 1) <> "$" Then
objListFile.WriteLine Chr(34) & strGroup & strDelim & objUser.Name & Chr(34)
End If
Next
Next
objListFile.Close
Könntest Du dann bitte einen Deiner Beiträge zu diesem Thema (mit dem Hinweis auf den anderen Beitrag) als "Wie kann ich einen Beitrag als gelöst markieren?" kennzeichnen?
Grüße
bastla
Hallo dnbCommander!
Ersetze die Zeile
durch eine passende "LDAP"-Angabe:
Für die Abfrage der User wäre dann noch der Filter auf "User" zu setzen.
Ansonsten sieh Dir vielleicht auch noch folgende Artikel an: Die Suche in Active Directory mit Skripten (Teil 1) sowie dessen Teil 2.
Grüße
bastla
Ersetze die Zeile
Set colGroups = GetObject("WinNT://" & strDomain)
Set colGroups = GetObject("LDAP://ou=bestimmteOU,dc=deinedomain,dc=local")
Ansonsten sieh Dir vielleicht auch noch folgende Artikel an: Die Suche in Active Directory mit Skripten (Teil 1) sowie dessen Teil 2.
Grüße
bastla
Hallo dnbCommander!
bzw
Vielleicht zur Sicherheit noch der Hinweis, dass Gruppen nur ausgegeben werden, wenn sie auch Mitglieder haben. Um das zu ändern:
Falls das bei Dir nicht klappt, könntest Du immer noch die in den verlinkten Artikeln beschriebene Vorgangsweise versuchen.
Grüße
bastla
gibts die OU prüfter zwar aber schreibt nix in die datei
Kann ich nicht nachvollziehen - es sollte sogar zuviel in die Datei geschrieben werden, da die jeweilgen Namen als RID in der Schreibweise "CN=Name" zurückgegeben werden. Abhilfe schafft dafür folgende Änderung:strGroup = Replace(objGroup.Name, "CN=", "")
strUserName = Replace(objUser.Name, "CN=", "")
Vielleicht zur Sicherheit noch der Hinweis, dass Gruppen nur ausgegeben werden, wenn sie auch Mitglieder haben. Um das zu ändern:
...
For Each objGroup In colGroups
strGroup = Replace(objGroup.Name, "CN=", "")
If objGroup.Members.Count <> 0 Then
For Each objUser in objGroup.Members
strUserName = Replace(objUser.Name, "CN=", "")
If Right(strUserName, 1) <> "$" Then
objListFile.WriteLine Chr(34) & strGroup & strDelim & strUserName & Chr(34)
End If
Next
Else
objListFile.WriteLine Chr(34) & strGroup & strDelim & Chr(34)
End If
Next
objListFile.Close
Falls das bei Dir nicht klappt, könntest Du immer noch die in den verlinkten Artikeln beschriebene Vorgangsweise versuchen.
Grüße
bastla
Hallo dnbCommander!
Damit wären wir bei der SQL-Abfrage-Variante angelangt:
Bitte beachten: Nach der letzten im Array angegebenen OU ist kein Komma zu setzen.
Wo Du Details zur Funktionsweise nachlesen könntest, weißt Du ja inzwischen ...
Grüße
bastla
Damit wären wir bei der SQL-Abfrage-Variante angelangt:
On Error Resume Next
Const strListFile = "D:\Gruppenliste.txt"
Const strDelim = ","
aOU = Array( _
"ou=eineOU,dc=deinedomain,dc=local", _
"ou=eineandereOU,dc=deinedomain,dc=local", _
"ou=dieletzteOU,dc=deinedomain,dc=local" _
)
Const ADS_SCOPE_SUBTREE = 2
Set objListFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strListFile, 2, True)
For Each OU In aOU
ListGroup OU
Next
objListFile.Close
' ####### Ende Hauptprogramm #######
Sub ListGroup(strOU)
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.Properties("Sort On") = "Name"
objCommand.CommandText = _
"SELECT Name, Member FROM 'LDAP://" & strOU & "' WHERE objectCategory='group'"
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount > 0 Then
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
strGroupName = objRecordSet.Fields("Name").Value
If IsNull(objRecordSet.Fields("Member").Value) Then
objListFile.WriteLine Chr(34) & strGroupName & strDelim & Chr(34)
Else
aUsers = objRecordSet.Fields("Member").Value
For Each strUserCN In aUsers
Set objUser = GetObject("LDAP://" & strUserCN)
strUserName = objUser.sAMAccountName
objListFile.WriteLine Chr(34) & strGroupName & strDelim & strUserName & Chr(34)
Next
End If
objRecordSet.MoveNext
Loop
End If
End Sub
Wo Du Details zur Funktionsweise nachlesen könntest, weißt Du ja inzwischen ...
Grüße
bastla