2009-07-25 76 views
0

アクティブディレクトリに40K +グループがあり、いくつかのアプリケーションで問題を引き起こしている循環ネストされたグループの問題にますます直面しています。アクティブディレクトリからの循環グループメンバーシップのリスト

誰も循環的なグループメンバーシップが存在する完全なルートをリストする方法を知っていますか?

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

どうすればいいですか。

+0

「リストダウン」とはどういう意味ですか?循環参照が存在する場合に壊れない方法で各グループのネストされたグループのリストを作成しようとしていますか、または循環ループに含まれるグループを検索するだけですか? – AnthonyWJones

+0

ネストされた循環グループを検索し、ネストされた循環グループをリストしたいと思います。 –

+0

これをチェックしてください:http://www.rlmueller.net/CircularNested.htm – Adeel

答えて

0

ここでは、このコードの修正版がこのトリックを行う必要があります。もちろん、私が頻繁に参照する優れた机のリソースも、本をチェックしてください。

' 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

これはネストされたメンバーシップ情報を提供するので大したことではありませんが、循環参照が含まれているかどうかはわかりません。どのグループメンバーシップが存在するのかが分かります。 答えを探していると、グラフトラバーサルのDepth First Searchというテクニックが見つかりました。擬似コードで言及されていましたので、VBScriptで実装しましたが、うまくいきません。私は現在、Pythonのような別の言語で実装しています。 –