【问题标题】:How to read "uSNChanged" property using C#如何使用 C# 读取“uSNChanged”属性
【发布时间】:2012-06-09 04:08:11
【问题描述】:

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

【问题讨论】:

    标签: c# active-directory directoryservices


    【解决方案1】:

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

    1. 包含对 COM 库的引用:“Active DS 类型库”,然后您需要使用 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 = 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 库出现问题,并且不需要通过 this list 提供答案。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-09
        • 2015-08-14
        • 2011-08-28
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多