我正在編寫一個應用程序,該應用程序需要知道用戶活動目錄對象(例如組成員資格)上的任何內容是否自上次運行應用程序後發生了更改。跟蹤活動目錄中的用戶更改
我正在查看whenChanged屬性,但只有在用戶更改其密碼時纔會更改。我只需要一些可以保存在配置文件中的內容,並在下次運行應用程序時在活動目錄中檢查該值。
任何人都知道我可以可靠地使用的任何東西?
乾杯 盧克
我正在編寫一個應用程序,該應用程序需要知道用戶活動目錄對象(例如組成員資格)上的任何內容是否自上次運行應用程序後發生了更改。跟蹤活動目錄中的用戶更改
我正在查看whenChanged屬性,但只有在用戶更改其密碼時纔會更改。我只需要一些可以保存在配置文件中的內容,並在下次運行應用程序時在活動目錄中檢查該值。
任何人都知道我可以可靠地使用的任何東西?
乾杯 盧克
鑑於你主要關注組,我認爲你必須創建一個哈希修改組成員資格不會影響用戶對象。
這是我打過的一個簡單例子。
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
計算,所以如果不適合你的工作是那麼這可能不是。
我之前檢查過一個,它只是一個別名,返回whenChanged – beakersoft 2011-04-04 15:05:13
你總是可以檢查該目錄的屬性去年寫或修改時間和可能保留一些XML或一些數據,跟蹤文件的最後寫入時間。
大概你處理了多少用戶?如果您只需在應用程序啓動時運行支票,最好只比較您關心的每個值。 – Jemes 2011-04-04 14:57:55
我想檢查它的主要組成員資格,我可能只需要創建一個基於所有組名稱的散列,並認爲如果沒有具體的方法 – beakersoft 2011-04-04 15:06:16