我对这段代码有一点困难,特别是对PrincipalSearcher。我正在尝试获取与特定OU关联的所有组的列表。
我尝试只返回所有Group作用域下的"Security“组,不包括通讯组。
我遇到的问题是,除了我打算返回的那个组之外,它还会返回这些内置组。
HelpServicesGroup TelnetClients管理员用户Guest打印操作员备份操作员Replicator远程桌面用户网络配置操作员性能监视器用户性能日志用户分布式COM用户域计算机域控制器架构管理员企业管理员证书发布者域管理员域用户域来宾组策略创建者所有者RAS和IAS服务器服务器操作员帐户操作员Windows2000之前的兼容访问传入林信任构建器窗口授权访问组终端服务器许可证服务器DnsAdmins DnsUpdateProxy IIS_WPG
我不确定是否作用域不正确,或者我是否遗漏了某种过滤。
相关代码段:
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;
}如何让它排除内置组?
任何与此相关的帮助都将不胜感激。
谢谢!
发布于 2012-04-03 02:59:29
两件事:
PrincipalContext的构造函数。如果您检查MSDN documentation on PrincipalContext constructors,您将看到您正在使用的MSDN documentation on PrincipalContext constructors具有一个ContextType和一个name,它代表您想要绑定到的上下文的域名:var ctx =新PrincipalContext(ContextType.Domain,"MyOU");
它绑定到MyOU域,并且直接绑定到该域树的根。
您可能正在寻找的是具有三个参数的构造函数-一个ContextType和两个字符串-第一个是上面提到的域名,第二个是搜索的起始位置。因此,将您的PrincipalContext结构更改为:
var ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN", "OU=MyOU");然后再次搜索- now,您应该只获得OU=MyOU容器中包含的组。
发布于 2012-04-03 03:06:57
您可以尝试:
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将把范围缩小到全局组。
希望这能有所帮助。
https://stackoverflow.com/questions/9981410
复制相似问题