首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# PrincipalSearcher,返回特定OU的AD组

C# PrincipalSearcher,返回特定OU的AD组
EN

Stack Overflow用户
提问于 2012-04-03 02:03:49
回答 2查看 17.7K关注 0票数 4

我对这段代码有一点困难,特别是对PrincipalSearcher。我正在尝试获取与特定OU关联的所有组的列表。

我尝试只返回所有Group作用域下的"Security“组,不包括通讯组。

我遇到的问题是,除了我打算返回的那个组之外,它还会返回这些内置组。

HelpServicesGroup TelnetClients管理员用户Guest打印操作员备份操作员Replicator远程桌面用户网络配置操作员性能监视器用户性能日志用户分布式COM用户域计算机域控制器架构管理员企业管理员证书发布者域管理员域用户域来宾组策略创建者所有者RAS和IAS服务器服务器操作员帐户操作员Windows2000之前的兼容访问传入林信任构建器窗口授权访问组终端服务器许可证服务器DnsAdmins DnsUpdateProxy IIS_WPG

我不确定是否作用域不正确,或者我是否遗漏了某种过滤。

相关代码段:

代码语言:javascript
复制
    public static ArrayList GetAllGroups()
    {
        var myItems = new ArrayList();

        var ctx = new PrincipalContext(ContextType.Domain,"MyOU");

        // define a "query-by-example" principal - here, we search for a GroupPrincipal 
        var qbeGroup = new GroupPrincipal(ctx);

        // create your principal searcher passing in the QBE principal    
        var srch = new PrincipalSearcher(qbeGroup);

        // find all matches
        foreach (Principal found in srch.FindAll())
        {
            var foundGroup = found as GroupPrincipal;

            if (foundGroup != null)
            {
                myItems.Add(foundGroup.Name);
            }
        }
        return myItems;
    }

如何让它排除内置组?

任何与此相关的帮助都将不胜感激。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-03 02:59:29

两件事:

  1. 没有与OU相关联的组- OU是一个容器,其中包含用户、计算机、组等(类似于包含文件的目录)。你是这个意思吗?您想枚举给定OU中包含的组??
  2. ,如果是这样的话:您没有正确调用PrincipalContext的构造函数。如果您检查MSDN documentation on PrincipalContext constructors,您将看到您正在使用的MSDN documentation on PrincipalContext constructors具有一个ContextType和一个name,它代表您想要绑定到的上下文的域名:

var ctx =新PrincipalContext(ContextType.Domain,"MyOU");

它绑定到MyOU域,并且直接绑定到该域树的根。

您可能正在寻找的是具有三个参数的构造函数-一个ContextType和两个字符串-第一个是上面提到的域名,第二个是搜索的起始位置。因此,将您的PrincipalContext结构更改为:

代码语言:javascript
复制
var ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN", "OU=MyOU");

然后再次搜索- now,您应该只获得OU=MyOU容器中包含的组。

票数 9
EN

Stack Overflow用户

发布于 2012-04-03 03:06:57

您可以尝试:

代码语言:javascript
复制
    var myItems = new ArrayList();

    var ctx = new PrincipalContext(ContextType.Domain, Environment.UserDomainName, "OU=Groups,DC=Domain,DC=Com");

    // define a "query-by-example" principal - here, we search for a GroupPrincipal  
    var qbeGroup = new GroupPrincipal(ctx);

    // create your principal searcher passing in the QBE principal     
    var srch = new PrincipalSearcher(qbeGroup);

    // find all matches 
    foreach (Principal found in srch.FindAll())
    {
        var foundGroup = found as GroupPrincipal;

        if (foundGroup != null && foundGroup.IsSecurityGroup == true)
        {
            myItems.Add(foundGroup.Name);
        }
    } 

PrincipalContext需要contextType、域和容器的DN (如果您只想搜索容器)。

foundGroup != null && foundGroup.IsSecurityGroup == true将返回所有安全组。这就是你想要的。

如果您愿意,您还可以使用GroupScope来改进内容:

foundGroup != null && foundGroup.GroupScope == GroupScope.Global将把范围缩小到全局组。

希望这能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9981410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档