如何使用C#读取“uSNChanged”属性

我想通过使用C#的ActiveDirectory中的uSNChanged值获取最后修改或创建的属性…我也试图找到uSNChanged的最大值,你能帮我找出解决方案吗? 谢谢

有两种方法可以通过.NET检索uSNChanged属性:

  1. 包含对COM库的引用:“Active DS Type Library”,然后您需要使用IADsLargeInterger来检索该值并最终将其转换为long 。 例如 :

     IADsLargeInteger li_ad = (IADsLargeInteger)oUser.Properties["USNChanged"].Value; long l_uChanged = GetLongFromLargeInteger( li_ad ); static long GetLongFromLargeInteger( IADsLargeInteger Li ) { long retval = Li.HighPart; retval <<=32; retval |=(uint)Li.LowPart; return retval; } 
  2. 仅使用C#转换值。 感谢Simon Gilbee ,我们有这个选择:

     long usnChanged = CovertADSLargeIntegerToInt64(oUser.Properties["USNChanged"].Value); public static Int64 ConvertADSLargeIntegerToInt64(object adsLargeInteger) { var highPart = (Int32)adsLargeInteger.GetType().InvokeMember("HighPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); var lowPart = (Int32)adsLargeInteger.GetType().InvokeMember("LowPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null); return highPart * ((Int64)UInt32.MaxValue + 1) + lowPart; } 

我强烈建议您使用选项#2以避免遗留ActiveDs库的问题,并且不需要此列表中的答案。

我得到了解决方案的人,我们可以通过此属性HighestCommittedUsn获得域控制器的最大值