下面的代码工作正常,但正在发生的是代码将结果限制为1500个用户,我们有超过1500个用户。我要做的是检索属于特定组成员的所有用户的列表。我知道DirectorySearcher
有一个PageSize设置但是,我无法找到设置DirectoryEntry的方法.PageSize仍然只会拉动该组的成员。
有人知道改变页面大小的方法吗?或者也许如何以另一种方式吸引特定群体的成员来容纳页面大小?
DirectoryEntry dEntryhighlevel = new DirectoryEntry("LDAP://CN=Users,OU=MyOu,OU=Clients,OU=Home,DC=bridgeTech,DC=net");
foreach (object dn in dEntryhighlevel.Properties["member"])
{
DirectoryEntry singleEntry = new DirectoryEntry("LDAP://" + dn);
DirectorySearcher dSearcher = new DirectorySearcher(singleEntry);
//filter just user objects
dSearcher.SearchScope = SearchScope.Base;
//dSearcher.Filter = "(&(objectClass=user)(dn=" + dn + "))";
//dSearcher.PageSize = 1000;
SearchResult singleResult = null;
singleResult = dSearcher.FindOne();
if (singleResult != null)
{
string Last_Name = singleResult.Properties["sn"][0].ToString();
string First_Name = singleResult.Properties["givenname"][0].ToString();
string userName = singleResult.Properties["samAccountName"][0].ToString();
string Email_Address = singleResult.Properties["mail"][0].ToString();
OriginalList.Add(Last_Name + "|" + First_Name + "|" + userName + "|" + Email_Address);
}
singleEntry.Close();
}
答案 0 :(得分:1)
最近出现在另一个帖子中:Always getting 1500 member of distribution list using PowerShell
简而言之,您希望使用范围检索来获取成员资格。这是一种旨在帮助您获取大于1500个值的大型属性的机制。
虽然我们正在谈论这个主题,但我想预测你的下一个主题。 :)根据您使用的API,读取组的成员资格将产生缺失的结果。如果您“接近金属”并使用LDAP API,您会发现由于主要组成员身份而导致组中的用户将丢失。我会在解决远程检索问题后使用您使用的任何方法对此进行测试,以确保您不会错过任何人。 有关此内容的更多信息,请访问:retrieving group members/membership from active directory when members attrib doesn't work
答案 1 :(得分:0)
我正在研究类似于此的内容,并注意到您的代码与我的代码略有不同。使用以下代码结构,我没有遇到任何有限结果的问题:
DirectoryEntry dEntryhighlevel = new DirectoryEntry("LDAP://CN=Users,OU=MyOu,OU=Clients,OU=Home,DC=bridgeTech,DC=net");
DirectorySearcher dSearcher = new DirectorySearcher();
//filter just user objects
dSearcher.Filter = "(objectClass=user)";
dSearcher.PageSize = 1000;
SearchResultCollection resultCollection = dirSearcher.FindAll();
foreach (SearchResult userResults in resultCollection )
{
string Last_Name = userResults .Properties["sn"][0].ToString();
string First_Name = userResults .Properties["givenname"][0].ToString();
string userName = userResults .Properties["samAccountName"][0].ToString();
string Email_Address = userResults .Properties["mail"][0].ToString();
OriginalList.Add(Last_Name + "|" + First_Name + "|" + userName + "|" + Email_Address);
}
这应该会返回所有用户。您需要在dSearcher.Filter
中使用LDAP搜索模式,以便将用户缩小到特定群组 - see this link以获得一些额外的帮助。