我目前正在尝试从名为Y的安全组中的一个名为Y的安全组中提取组织中的所有用户。我已经尝试了多种不同的方法,并开始用它结束我的智慧。我目前回到尝试检索我的用户的DirectoryEntry方法,但之前尝试过PrincipalContext方法。 PrincipalContext方法非常适用于检索我的服务器,但它们是单个顶级组的成员。组Y嵌套在组X下,组如下:A - > B - > C - > D - > X - > Y.我看到的另一个可能的问题是distinguishedName属性具有看似无组织方式的OU,所以我感觉到顺序对于AD来说并不重要?但是我会假设在使用外卡查询时,顺序有点重要吗?
distinguishedName属性的结构如下(伪以保存输入):CN =用户名,OU = Y,D,X,C,B,A,DCs = a,b,c,net
以下是我当前提取用户的代码:
private static void GetUsers() {
int x = 0;
DirectoryEntry dm = new DirectoryEntry("LDAP://a.b.c.net");
DirectorySearcher searcher = new DirectorySearcher(dm);
searcher.Filter = "(&(objectClass=user)(distinguishedName=*OU=Y*OU=X*))";
searcher.PropertiesToLoad.AddRange(new string[4] {"name", "samAccountName", "userPrincipalName", "mail"});
foreach (SearchResult result in searcher.FindAll()) {
Console.WriteLine(string.Format("Name: {0}\nSAM: {1}\nPrincipal: {2}\nMail: {3}",
result.Properties["name"],
result.Properties["samAccountName"],
result.Properties["userPrincipalName"],
result.Properties["mail"]));
x++;
}
Console.WriteLine("User Count: " + x);
}
我假设这是我的过滤器的一个问题,因为代码完全执行并打印用户数为零。我发现很难理解外卡如何工作,并且发现很少有关于如何从子组中提取用户以及缩小范围的信息。我为一个非常非常大的组织工作,所以只是拉动域中的所有用户不仅会花费很多时间,而且还会返回数万条记录。
请帮帮忙?!?!?!?!? -谢谢, 杰米
答案 0 :(得分:1)
因此经过数小时的研究并且在Stack Overflow上没有运气,我发现它是我的域名和过滤器的组合。我必须将OU列表添加到提供的域中DNS的末尾。此外,需要缩小过滤器,我不得不删除distinguishedName属性,只过滤名称和sn属性。
using (DirectoryEntry entry = new DirectoryEntry("LDAP://a.b.c.net/OU=Y,OU=D,OU=X,OU=C,OU=B,OU=A,DC=a,DC=b,DC=c,DC=net"))
mySearcher.Filter = ("(&(objectClass=user)(&(|(name=*1*)(name=*2*))(!(sn=*.*))))");