Как прочитать свойство "uSNChanged" с помощью C#

Я хочу получить последние измененные или созданные атрибуты через uSNChanged значение в ActiveDirectory с помощью C# ... Я также пытался найти максимальное значение uSNChangedМожете ли вы помочь мне найти решение? Спасибо

2 ответа

Есть два способа получить uSNChanged собственность через.NET:

  1. Включите ссылку на библиотеку COM: "Active DS Type Library", тогда вам нужно использовать 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 = 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;
    }
    

Я настоятельно рекомендую вам использовать вариант № 2, чтобы избежать проблем с устаревшей библиотекой ActiveDs, и вам не понадобятся ответы из этого списка.

Я получил решение, ребята, мы можем получить максимальное значение usnolated контроллера домена через этот атрибут HighestCommittedUsn

Другие вопросы по тегам