获取Active Directory中所有用户的密码信息

时间:2011-11-17 19:55:52

标签: .net active-directory

我被要求编写一个程序,用于检查AD中所有用户的密码到期之前的时间。然后,程序会向密码在3天或更短时间内到期的用户发送电子邮件。电子邮件部分很简单,但我不太熟悉AD,也没有在互联网上找到任何有用的东西。

有一个更具体的解释,如果我有一个名为users的表的数据库,我会用SQL做这样的事情:

 SELECT FirstName, LastName, PasswordLastChangedDate, PasswordExpireDate
 FROM users;

我需要用VB(或C#)来做这件事。我在System.DirectoryServices名称空间中戳了一下,但没有运气。有人能指出我正确的方向吗?

1 个答案:

答案 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
   }
}