【问题标题】:DirectoryEntry Page Size limitDirectoryEntry 页面大小限制
【发布时间】:2012-09-01 04:53:34
【问题描述】:

下面的代码运行良好,但是代码将结果限制为 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();
}

【问题讨论】:

  • 除了将其限制为更小之外,您无法真正更改页面大小。限制曾经是 1000。我有一些代码可以解决这个问题。基本上它以 1000 个记录块返回数据集。我会挖掘出来并发布它。

标签: c# .net active-directory


【解决方案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

【讨论】:

    【解决方案2】:

    我目前正在处理与此类似的事情,并注意到您的代码与我的代码略有不同。使用以下代码结构,我没有遇到任何结果有限的问题:

    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 以获得更多帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 2019-09-27
      • 2018-01-16
      相关资源
      最近更新 更多