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

时间:2012-06-09 04:08:11

标签: c# active-directory directoryservices

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

2 个答案:

答案 0 :(得分:2)

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

  1. 包含对COM库的引用:“Active DS Type Library”,然后您需要使用IADsLargeInterger检索该值,最后将其转换为longFor example

    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;
    }
    
  3. 我强烈建议您使用选项#2 以避免遗留ActiveDs库出现问题,并且不需要this list之外的答案。

答案 1 :(得分:1)

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