2011-11-17 73 views
2

我被要求编写一个程序,用于检查AD中所有用户的密码过期的时间。该程序然后发送电子邮件给那些密码将在3天或更短时间内过期的用户。电子邮件部分很简单,但我对AD不太熟悉,也不能在互联网上找到任何有用的东西。获取Active Directory中所有用户的密码信息

对于更具体的解释,如果我有一个表称为用户数据库,我会做这样的事情与SQL:

SELECT FirstName, LastName, PasswordLastChangedDate, PasswordExpireDate 
FROM users; 

我需要用VB(或C#)来做到这一点。我在System.DirectoryServices命名空间中探索过,但一直没有任何运气。任何人都可以指出我正确的方向吗?

回答

2

如果您还没有 - 绝对看MSDN文章[在.NET Framework 3.5管理目录安全主体] [1],它很好地展示如何使新功能的最佳使用System.DirectoryServices.AccountManagement

您可以使用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 
    } 
} 
+1

伙计,我爱你。我一直在寻找这样的事情。非常感激! – MGZero

+0

夫妇的事情 - 该示例是基于帐户到期与密码到期,所以你会想调整。此外,如果您在环境中使用细粒度密码策略,这是一个更难解决的问题,因为您需要询问每个用户对象的有效策略,然后根据该策略计算密码过期日期。 –

相关问题