【问题标题】:Getting all Active Directory Properties with DirectorySearcher使用 DirectorySearcher 获取所有 Active Directory 属性
【发布时间】:2014-12-25 23:31:31
【问题描述】:

我正在访问 Active Directory。如果我这样称呼它

DirectorySearcher srch = new DirectorySearcher(de);

//Filter to return only users and deleted users and not system accounts
srch.Filter = "(|(&(objectCategory=person)(objectClass=user)(sn=*))(&(isDeleted=TRUE)(objectClass=user)))";
srch.SearchScope = SearchScope.OneLevel;
srch.ExtendedDN = ExtendedDN.Standard;
srch.FindAll();

然后它返回具有某些属性的用户列表...我想查看“whenChanged”属性但是当我尝试添加该行时

srch.PropertiesLoad.Add("whenChanged");

那么它不会返回任何用户。这可能是由于已删除的用户没有该属性,并且它不能统一应用所有属性,因此它返回 0 结果?如何查看所有用户,包括已删除和活动用户,并查看所有用户的“whenChanged”属性,即使它导致 null

【问题讨论】:

    标签: c#-4.0 active-directory directorysearcher


    【解决方案1】:

    几点:

    • 要获取已删除的对象,您需要设置srch.Tombstone = true;
    • 删除的对象存储在“CN=Deleted Objects,DC=domain,DC=com”下。
      因此,要搜索所有用户以及已删除的对象,最好使用域根作为搜索根,并使用 SearchScope.Subtree 作为范围
    • 添加到DirectorySearcher.PropertiesLoad 的任何属性都不应删除任何结果。
      这可能是由于srch.PropertiesLoad.Add("whenChanged"); 以外的原因造成的
    • 为什么要在搜索中输入sn=*?这会过滤掉未设置姓氏的用户。
      这是故意的吗?

    测试了以下代码,可以成功获取用户和删除用户,并获取“whenChanged”属性。请试一试。

    DirectoryEntry de = new DirectoryEntry("LDAP://domain.com/dc=domain,dc=com", "user", "pwd");
    DirectorySearcher srch = new DirectorySearcher(de);
    
    //Filter to return only users and deleted users and not system accounts
    srch.Filter = "(|(&(objectCategory=person)(objectClass=user)(sn=*))(&(isDeleted=TRUE)(objectClass=user)))";
    srch.SearchScope = SearchScope.Subtree;
    srch.ExtendedDN = ExtendedDN.Standard;
    srch.Tombstone = true;
    srch.PropertiesToLoad.Add("whenChanged");
    srch.PropertiesToLoad.Add("distinguishedName");
    using (SearchResultCollection results = srch.FindAll())
    {
        foreach (SearchResult result in results)
        {
            string dn = result.Properties["distinguishedName"][0] as string;
            Console.WriteLine("- {0}", dn);
    
            ResultPropertyValueCollection prop = result.Properties["whenChanged"];
            if (prop != null)
            {
                Console.WriteLine("  {0}", (DateTime)prop[0]);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多