1

我正在尝试查找所有在本月过生日的 AD 用户。我希望这是动态的,但无论如何。我是查询 ldap 的新手,我在编写过滤搜索的字符串时遇到了麻烦。目前我正在获取所有用户,然后使用 LINQ 对返回的用户列表进行排序,但我想我会尝试从 AD 搜索中返回用户。现在我有:

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(_path, username, pwd);

System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(entry);

mySearcher.Filter = ("(objectClass=user)");

我相信运行 AD 的人将他们的 B-days 简单地存储为格式为 MMDD 即 0508 的字符串。对此我无能为力(如果有更好的方法,我无能为力)。

那么解决这个问题的最佳方法是什么?

如果需要,附加代码:

     SortOption option = new SortOption("sAMAccountName", System.DirectoryServices.SortDirection.Ascending);

        mySearcher.Sort = option;

        DataSet ds = new DataSet();

        DataTable dtUsers = new DataTable("Users");

        dtUsers.Columns.Add("userid");

        dtUsers.Columns.Add("name");

        dtUsers.Columns.Add("birthday");

        dtUsers.Columns.Add("anniversary");

        dtUsers.Constraints.Add("UniqueUserId", dtUsers.Columns["userid"], true);



        foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())

        {

        System.DirectoryServices.DirectoryEntry de1 = resEnt.GetDirectoryEntry();

        DataRow drUser = dtUsers.NewRow();

        if (de1.Properties["sAMAccountName"].Value != null && de1.Properties["name"].Value != null && de1.Properties["employeeBirthDate"].Value != null && de1.Properties["employeeHireDate"].Value != null)

        {



        drUser["userid"] = de1.Properties["sAMAccountName"].Value.ToString();

        drUser["name"] = de1.Properties["name"].Value.ToString();
        drUser["birthday"] = de1.Properties["employeeBirthDate"].Value.ToString();
        drUser["anniversary"] = de1.Properties["employeeHireDate"].Value.ToString();



        dtUsers.Rows.Add(drUser);

        }

    }

    ds.Tables.Add(dtUsers);
4

2 回答 2

1

LDAP 客户端可以使用substring搜索过滤器来限制返回到搜索请求的条目。例如,过滤器(&(objectClass=user)(birthday=05*))将返回所有具有 的属性和以开头的属性objectClass的条目。如果使用此方法,应提前通知目录管理员,以确保正确索引生日属性。userbirthday05

也可以看看

于 2012-05-08T20:14:30.147 回答
0
int now = DateTime.Now.Month;
                string month;
                if (now < 10)
                {
                    month = "0" + now.ToString();
                }
                else
                {
                    month = now.ToString();
                }

mySearcher.Filter = ("(&(objectClass=user)(|(employeeHireDate=" + month + "*)(employeeBirthDate=" + month + "*)))");
于 2012-05-08T20:13:26.447 回答