我正在编写一个应用程序,需要知道自上次运行应用程序以来用户活动目录对象(例如组成员身份)上是否有任何更改。
我正在查看whenChanged属性,但只有在用户更改密码时才会显示更改。我只需要我可以在配置文件中保存的内容,并在下次运行应用程序时在活动目录中检查该值。
任何人都知道我能可靠使用的任何东西吗?
干杯 卢克
答案 0 :(得分:1)
您可以随时检查目录的属性是否有上次写入或修改时间,并且可能会保留一些XML或一些跟踪文件上次写入时间的数据。
答案 1 :(得分: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();
}
以前(垃圾)答案 根据文档,Modify-Time-Stamp属性是“表示上次更改此对象的日期的计算属性”。这听起来像你想要的。它可以在2000年以后的所有版本中使用。
编辑看起来这是从whenChanged
计算的,所以如果这对您不起作用,那么这可能不会。