2011-04-04 58 views
1

我正在編寫一個應用程序,該應用程序需要知道用戶活動目錄對象(例如組成員資格)上的任何內容是否自上次運行應用程序後發生了更改。跟蹤活動目錄中的用戶更改

我正在查看whenChanged屬性,但只有在用戶更改其密碼時纔會更改。我只需要一些可以保存在配置文件中的內容,並在下次運行應用程序時在活動目錄中檢查該值。

任何人都知道我可以可靠地使用的任何東西?

乾杯 盧克

+0

大概你處理了多少用戶?如果您只需在應用程序啓動時運行支票,最好只比較您關心的每個值。 – Jemes 2011-04-04 14:57:55

+0

我想檢查它的主要組成員資格,我可能只需要創建一個基於所有組名稱的散列,並認爲如果沒有具體的方法 – beakersoft 2011-04-04 15:06:16

回答

1

鑑於你主要關注組,我認爲你必須創建一個哈希修改組成員資格不會影響用戶對象。

這是我打過的一個簡單例子。

public static string HashGroups(string user) 
{ 
    DirectoryEntry directoryEntry = default(DirectoryEntry); 
    DirectorySearcher dirSearcher = default(DirectorySearcher); 

    List<string> result = new List<string>(); 

    directoryEntry = new DirectoryEntry("LDAP://<YOUR_DOMAIN>"); 
    directoryEntry.RefreshCache(); 

    // Get search object, specify filter and scope, 
    // perform search. 
    dirSearcher = new DirectorySearcher(directoryEntry); 
    dirSearcher.PropertiesToLoad.Add("memberOf"); 
    dirSearcher.Filter = "(&(sAMAccountName=" + user + "))"; 

    SearchResult sr = dirSearcher.FindOne(); 

    // Enumerate groups 
    foreach (string group in sr.Properties["memberOf"]) 
    { 
     result.Add(group); 
    } 

    // OrderBy is important! Otherwise, your hash might fail because 
    // the groups come back in different order. 
    MD5 md5 = MD5.Create(); 
    Byte[] inputBytes = Encoding.ASCII.GetBytes(result.OrderBy(s1 => s1).SelectMany(s2 => s2).ToArray()); 
    byte[] hash = md5.ComputeHash(inputBytes); 

    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < hash.Length; i++) 
    { 
     sb.Append(hash[i].ToString("X2")); 
    } 
    return sb.ToString(); 
} 

PREVIOUS(垃圾)ANSWER 根據該文檔,在Modify-Time-Stamp屬性是「當這個對象最後更改表示日期甲計算屬性」。這聽起來像你想要的。它在所有版本的可用回到2000年

編輯它看起來像這樣從whenChanged計算,所以如果不適合你的工作是那麼這可能不是。

+0

我之前檢查過一個,它只是一個別名,返回whenChanged – beakersoft 2011-04-04 15:05:13

1

你總是可以檢查該目錄的屬性去年寫或修改時間和可能保留一些XML或一些數據,跟蹤文件的最後寫入時間。