Active Directory通知 - 如何判断更改是否为新用户

时间:2012-02-10 16:46:51

标签: c# active-directory notifications

我的AD通知工作正常,监视OU的更改(使用http://dunnry.com/blog/ImplementingChangeNotificationsInNET.aspx中的更改通知程序)。创建新用户时,会生成两个通知,而我无法将两者分开。我的假设(我知道很危险)是用户首先被创建,然后被修改,但我不相信是这样的。

我最初的想法是使用uSNCreated和uSNChanged,但即使在第一次通知时它们也是不同的。同样,whenCreated,whenChanged和modifyTimeStamp对于两个条目的每个结果都相同。

显然必须有办法做到这一点,但我看不到任何可以唯一识别第二个通知的属性。

任何线索?

2 个答案:

答案 0 :(得分:0)

usnChanged基于一个计数器,只要您与同一个DC通话,每次更改为AD时都会逐步更新。对于您的更改数据,您可以使用后两者并使用该记录。要确定记录是否是新记录,您只需跟踪您从之前收到的更改中看到的任何更改中的最高记录,并将usnCreated与此进行比较。如果usnCreated更高,那么这是一个新记录。

您还可以使用RootDSE中的highestCommittedUSN作为比较的存储值,但这需要在完成更改通知处理后执行单独的查询。

答案 1 :(得分:0)

这两个通知来自AD创建对象,然后为用户设置密码。

uSNChanged是去这里的方式。更高的值是最新的变化。 .NET中的技巧是在不使用icky Active Ds COM库的情况下翻译该值。

有几个问题已经涵盖了以.NET友好的方式管理uSNChanged属性: