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

本文关键字:uSNChanged 属性 读取 何使用 | 更新日期: 2023-09-27 18:36:34

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

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

有两种

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

  1. 包括对 COM 库的引用:"活动 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# 转换值。 感谢西蒙·吉尔比,我们有这个选择:

     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 以避免旧版 ActiveD 库出现问题,并且不需要此列表中的答案。

我得到了解决方案,我们可以通过此属性获得域控制器的最大USNchange值 最高承诺的USN