我被要求编写一个程序,用于检查AD中所有用户的密码到期之前的时间。然后,程序会向密码在3天或更短时间内到期的用户发送电子邮件。电子邮件部分很简单,但我不太熟悉AD,也没有在互联网上找到任何有用的东西。
有一个更具体的解释,如果我有一个名为users的表的数据库,我会用SQL做这样的事情:
SELECT FirstName, LastName, PasswordLastChangedDate, PasswordExpireDate
FROM users;
我需要用VB(或C#)来做这件事。我在System.DirectoryServices
名称空间中戳了一下,但没有运气。有人能指出我正确的方向吗?
答案 0 :(得分:2)
如果您还没有 - 绝对阅读MSDN文章[在.NET Framework 3.5中管理目录安全主体] [1],该文章很好地展示了如何充分利用System.DirectoryServices.AccountManagement
中的新功能< / p>
您可以使用PrincipalSearcher
和“按示例查询”主体进行搜索。
“查询示例”用户也可以设置一些“高级”搜索选项,例如 当密码过期时等等:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// define a "query-by-example" principal - here, we search for a UserPrincipal
// which has a password that will expire in 3 days or less
UserPrincipal userTemplate = new UserPrincipal(ctx);
userTemplate.AdvancedSearchFilter.AccountExpirationDate(DateTime.Today.AddDays(3), MatchType.LessThanOrEquals);
// instantiate searcher
PrincipalSearcher searcher = new PrincipalSearcher(userTemplate);
// enumerate matching users
foreach (Principal foundPrincipal in searcher.FindAll())
{
UserPrincipal foundUser = (foundPrincipal as UserPrincipal);
if (foundUser != null)
{
// do something with users found - e.g. send e-mail
}
}