5

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

4

2 回答 2

4

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

  1. 包含对 COM 库的引用:“Active DS 类型库”,然后您需要使用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 = 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;
     }
    

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

于 2012-11-20T14:37:46.287 回答
1

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

于 2012-06-09T08:57:15.943 回答