我希望使用C#通过ActiveDirectory中的uSNChanged
值获取最后修改或创建的属性...我还试图找到uSNChanged
的最大值,你能帮我找到吗?解决方案?感谢
答案 0 :(得分:2)
有两种方法可以通过.NET检索uSNChanged
属性:
包含对COM库的引用:“Active DS Type Library”,然后您需要使用IADsLargeInterger
检索该值,最后将其转换为long
。 For 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;
}
仅使用C#翻译值。感谢Simon Gilbee,我们有这个选项:
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库出现问题,并且不需要this list之外的答案。
答案 1 :(得分:1)
我得到了解决方案的人,我们可以通过此属性获取域控制器的最大值({3}}