2009-07-25 2 views
0

Wir haben 40K + Gruppen in unserem Active Directory und wir stehen zunehmend vor dem Problem von zirkular verschachtelten Gruppen, die Probleme für einige Anwendungen schaffen.Kreisförmige Gruppenmitgliedschaft aus Active Directory auflisten

Kann jemand den vollständigen Weg auflisten, durch den eine kreisförmige Gruppenmitgliedschaft besteht?

z.B.

G1 --> G2 --> G3 --> G4 --> G1 

Wie listet ich es auf.

+0

Was meinen Sie mit "List down"? Möchten Sie eine Liste verschachtelter Gruppen für jede Gruppe in einer Weise erstellen, die nicht bricht, wenn ein Zirkelverweis existiert ODER Sie suchen einfach nach Gruppen, die an einer Kreisschleife beteiligt sind? – AnthonyWJones

+0

Ich möchte nach verschachtelten kreisförmigen Gruppen suchen und auflisten, wie sie verschachtelt sind. –

+0

Überprüfen Sie dies: http://www.rlmueller.net/CircularNested.htm – Adeel

Antwort

0

Hier, eine modifizierte Version dieses Codes sollte den Trick tun. Schauen Sie sich das Buch natürlich auch an, es ist eine ausgezeichnete Schreibtisch-Ressource, auf die ich mich oft beziehe.

' This VBScript code prints the nested membership of a group. 

' --------------------------------------------------------------- 
' From the book "Active Directory Cookbook" by Robbie Allen 
' ISBN: 0-596-00466-4 
' --------------------------------------------------------------- 

' ------ SCRIPT CONFIGURATION ------ 
strGroupDN = "<GroupDN>" ' e.g. cn=SalesGroup,ou=Groups,dc=rallencorp,dc=com 
' ------ END CONFIGURATION --------- 

strSpaces = " " 
set dicSeenGroupMember = CreateObject("Scripting.Dictionary") 
Wscript.Echo "Members of " & strGroupDN & ":" 
DisplayMembers "LDAP://" & strGroupDN, strSpaces, dicSeenGroupMember 

Function DisplayMembers (strGroupADsPath, strSpaces, dicSeenGroupMember) 

    set objGroup = GetObject(strGroupADsPath) 
    for each objMember In objGroup.Members 
     Wscript.Echo strSpaces & objMember.Name 
     if objMember.Class = "group" then 
     if dicSeenGroupMember.Exists(objMember.ADsPath) then 
      Wscript.Echo strSpaces & " ^already seen group member " & _ 
            "(stopping to avoid loop)" 
     else 
      dicSeenGroupMember.Add objMember.ADsPath, 1 
      DisplayMembers objMember.ADsPath, strSpaces & " ", _ 
          dicSeenGroupMember 
     end if 
     end if 
    next 

End Function 
+0

Das hilft nicht viel, da es die verschachtelte Mitgliedschaft Informationen zur Verfügung stellt, das ist in Ordnung, aber nicht sagen, ob es eine zirkuläre Referenz beteiligt ist, wenn Es gibt dann durch welche Gruppenmitgliedschaft. Auf der Suche nach der Antwort, fand ich eine Technik namens Tiefe erste Suche nach Graph Traversal, es wurde in Pseudo-Code erwähnt, also habe ich es in Vbscript implementiert, aber es funktioniert nicht gut. Ich bin gerade dabei, es in einer anderen Sprache wie Python zu implementieren. –