如何使用 C# 读取“uSNChanged”属性
本文关键字:uSNChanged 属性 读取 何使用 | 更新日期: 2023-09-27 18:36:34
我想使用 C# 通过 ActiveDirectory 中的uSNChanged
值获取最后修改或创建的属性...我也在努力寻找uSNChanged
的最大值,你能帮我找出解决方案吗? 谢谢
有两种
方法可以通过 .NET 检索 uSNChanged
属性:
包括对 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; }
仅使用 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