Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Active Directory获取除特殊组之外的所有组_C#_Active Directory - Fatal编程技术网

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

C# Active Directory获取除特殊组之外的所有组,c#,active-directory,C#,Active Directory,为了获取Active Directory中的所有组,我用C#编写了这段代码。它工作得非常好,因为我不需要传递任何服务器名、OU、DC等 UserPrincipal current_user = UserPrincipal.Current; PrincipalContext current_context = current_user.Context; PrincipalContext ctx = new PrincipalContext(Con

为了获取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;
UserPrincipal current\u user=UserPrincipal.current;
PrincipalContext当前上下文=当前用户上下文;
PrincipalContext ctx=新PrincipalContext(ContextType.Domain);
GroupPrincipal qbeUser=新的GroupPrincipal(ctx);
Principal userOrGroup=qbeUser作为主体;
userOrGroup.Name=“*”;
PrincipalSearcher=新PrincipalSearcher(用户或组);
列出所有组=新建列表();
//列举结果——你需要检查你得到的是什么样的本金
foreach(在searcher.FindAll()中找到主体)
{
//这是一个用户主体-做你需要做的事情。。。
如果(找到的是UserPrincipal)
{
//  ......
}
else if(找到的是GroupPrincipal)
{
AllGroups.Add(found.Name);
//GroupPrincipal gp=作为GroupPrincipal找到;
//var data=gp.GetMembers();
//如果它是一个团体-做任何你需要做的与一个团体。。。。
}
}
//返回所有组;
问题是它列出了太多我不需要的组

PerformanceLoguser、SchemaAdmins、HelpServiceGroup、Telnet客户端等

我只需要管理员、来宾和其他用户创建的组。我读到过一些类似的东西,如特殊群体等等


非常感谢您在这方面提供的任何帮助。

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

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


解决这个问题的一个办法是,找到相关群体有共同点(或创建一个)的一些独特属性,然后过滤这些属性的存在。

在执行搜索时,广告不会根据群体相关性进行区分。它要么是一个团体,要么不是。但是,例如,您可以指定是否返回安全组或通讯组

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

解决这个问题的一个办法是找到一些相关团队有共同点(或创建一个)的独特属性,然后过滤这些属性的存在