0

DirectorySearcher および Filter/PropertiesToLoad を使用して、特定のグループ/部門内のすべてのメンバーおよび (のメンバー)サブグループのリストを取得するにはどうすればよいですか?

現時点では、グループにすべてのメンバーを戻すことができます。ただし、グループ内にサブグループがあり、それらのサブグループ内のメンバーにもアクセスできません。

これは私がこれまでに持っているものです:

        DirectoryEntry entry = null;
    entry = new DirectoryEntry("LDAP://DC=au,DC=company,DC=com", null, null, AuthenticationTypes.Secure);

    try
    {
        DirectorySearcher ouSearch = new DirectorySearcher(entry);
        ouSearch.Filter = "(&(objectClass=user)(objectCategory=person)(displayName=*" + username + "*)" +
        "(|" +
            "(memberOf=CN=my department,OU=ADC-Distribution Groups,DC=au,DC=company,DC=com)" +

        ")" +

        ")";

        ouSearch.PropertiesToLoad.Add("samAccountName");
        ouSearch.PropertiesToLoad.Add("displayName");
        ouSearch.PropertiesToLoad.Add("memberOf");
        ouSearch.SearchScope = SearchScope.Subtree;

        SearchResultCollection allOUS = ouSearch.FindAll();

どんな支援も大歓迎です!

4

1 に答える 1

1

別のグループのメンバーであるすべてのサブグループを再帰的に展開する検索を行う必要があります。

GroupPrincipalただし、 System.DirectoryServices.AccountManagement 名前空間のクラスを使用すると、はるかに簡単な方法があります。

GroupPrincipalGetMembersグループのすべてのメンバーを再帰的に取得できるメソッドがあります。trueGetMembers の唯一のパラメーターとして指定するだけです。

次の例は、 MSDNからコピーしたものです。

PrincipalContext ctx = new PrincipalContext(ContextType.Domain,                                                                    
                                        "fabrikam.com", 
                                        "DC=fabrikam,DC=com", 
                                        "administrator", 
                                        "SecretPwd123");

GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, 
                                               IdentityType.Name, 
                                               "Domain Admins");

if (grp != null)
{
    foreach (Principal p in grp.GetMembers(recursive: true))
    {
        Console.WriteLine(p.Name);
    }
    grp.Dispose();
}

ctx.Dispose(); 
于 2014-02-14T10:46:24.483 に答える