5

uSNChangedC# を使用して、ActiveDirectoryの値を介して、最後に変更または作成された属性を取得したいのですが、 の最大値も見つけようとしuSNChangedていました。ありがとう

4

2 に答える 2

4

uSNChanged.NET 経由でプロパティを取得するには、次の 2 つの方法があります。

  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# のみを使用して値を変換します。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;
     }
    

従来の ActiveDs ライブラリの問題を回避するために、オプション #2 を使用することを強くお勧めします。このリストからの回答は必要ありません。

于 2012-11-20T14:37:46.287 に答える
1

私はソリューションの人を手に入れました、この属性HighestCommittedUsnを介してドメインコントローラーの最大のusnchanged値を取得できます

于 2012-06-09T08:57:15.943 に答える