Active Directory获取除特殊组之外的所有组

时间:2012-07-31 04:33:46

标签: c# active-directory

要获取Active Directory中的所有组,我已在C#中编写此代码。它工作得很好,因为我不需要传递任何服务器名称,OU,DC等。

        UserPrincipal current_user = UserPrincipal.Current;

        PrincipalContext current_context = current_user.Context;

        PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

        GroupPrincipal qbeUser = new GroupPrincipal(ctx);

        Principal userOrGroup = qbeUser as Principal;
        userOrGroup.Name = "*";

        PrincipalSearcher searcher = new PrincipalSearcher(userOrGroup);

        List<string> AllGroups = new List<string>();

        // enumerate the results - you need to check what kind of principal you get back
        foreach (Principal found in searcher.FindAll())
        {
            // is it a UserPrincipal - do what you need to do with that...
            if (found is UserPrincipal)
            {
                //  ......
            }
            else if (found is GroupPrincipal)
            {
                AllGroups.Add(found.Name);

                //GroupPrincipal gp = found as GroupPrincipal;

                //var data = gp.GetMembers();

                // if it's a group - do whatever you need to do with a group....
            }
        }

        //return AllGroups;

问题在于它列出了太多我不需要的群体

PerformanceLogUsers,SchemaAdmins,HelpServiceGroups,Telnet客户端等。

我只需要管理员,访客和其他用户创建的群组。我已经读到过像这样的特殊组等等。

对此方面的任何帮助表示高度赞赏。

1 个答案:

答案 0 :(得分:1)

AD在执行搜索时不会通过组相关性进行区分。它既可以是一个团体,也可以不是。但是,您可以指定是否返回安全组或通讯组。

目前如何设置目录,这是另一回事。如果您想要的组和您不想要的组都是“安全组”,那么它将构成问题。

对此的一个解决方案是找到您的相关群体共同(或创建一个)的一些独特属性,然后过滤它们的存在。