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

5

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

2个回答

4

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

  1. Include a reference to a COM library: "Active DS Type Library", then you need to use the IADsLargeInterger to retrieve the value and finally convert it to a long. For 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. Translate the values only using C#. Thanks to Simon Gilbee, we have this option:

     long usnChanged = ConvertADSLargeIntegerToInt64(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;
     }
    
我强烈推荐您选择第二个选项,以避免与旧版ActiveDs库出现问题,并且不需要在这个列表上寻找答案。

1
我有解决方案了,大家可以通过这个属性HighestCommittedUsn获取域控制器的最大不变值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接