2011-11-17 70 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

夫婦的事情 - 該示例是基於帳戶到期與密碼到期,所以你會想調整。此外,如果您在環境中使用細粒度密碼策略,這是一個更難解決的問題,因爲您需要詢問每個用戶對象的有效策略,然後根據該策略計算密碼過期日期。 –

相關問題