无法从LDAP用户获取某些字段

本文关键字:字段 获取 用户 LDAP | 更新日期: 2023-09-27 18:20:35

我无法从用户对象(如PasswordNeverExpires)中获取某些字段。现在,我正在循环浏览2000多个用户返回的每个属性,我的条件断点从未中断过一次,所以我知道它不会返回。如果无条件中断,则此代码返回的属性数始终为1。我们的服务器是Windows 2003 Server。我可以从NetEnum命令中获得我想要的所有信息。我看到其他人声称他们可以做到这一点,我看不出我的代码有什么不同。当我不提供任何要加载的属性时,它会获取大约30-37个属性。我需要并使用其中的几个属性。

    public void FetchUsers(string domainId, Sql sql)
    {
        var entry = new DirectoryEntry("LDAP://" + DomainControllerAddress, DomainPrefixedUsername, Password,
            AuthenticationType);
        var dSearch = new DirectorySearcher(entry)
        {
            Filter = "(&(objectClass=user)(!(objectclass=computer)))",
            SearchScope = SearchScope.Subtree,
            PageSize = 1000,
        };
        dSearch.PropertiesToLoad.Add("passwordneverexpires");
        var users = dSearch.FindAll();
        foreach (SearchResult ldapUser in users)
        {
            SaveUser(ldapUser, sql, domainId);
        }
    }
    private void SaveUser(SearchResult ldapUser, Sql sql, string domainId)
    {
        if (ldapUser.Properties.PropertyNames == null) return;
        foreach (string propertyName in ldapUser.Properties.PropertyNames)
        {
//I'm breaking here on the condition that propertyName != 'adspath' and it never breaks
            var v = ldapUser.Properties[propertyName];
        }
        return;
}

无法从LDAP用户获取某些字段

很少有东西:

  1. 你的基本过滤器效率很低。请改用此(&(objectCategory=person)(objectClass=user))
  2. 没有名为passwordneverexpires的属性。您需要检查用户的userAccountControl掩码中的位13,请参阅http://msdn.microsoft.com/en-us/library/aa772300%28v=vs.85%29.aspx以获取值列表
  3. 你永远不会打断你的循环,因为你告诉客户只请求一个属性

您可以使用类似于:(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))的过滤器来获取帐户配置为DONT_EXPIRE_PASSWORD的所有用户。

-jim