我正在尝试查找所有在本月过生日的 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);