我想uSNChanged
使用 C# 通过 ActiveDirectory 中的值获取最后修改或创建的属性...我也试图找到 的最大值uSNChanged
,你能帮我找出解决方案吗?谢谢
问问题
4507 次
2 回答
4
有两种方法可以uSNChanged
通过 .NET 检索属性:
包含对 COM 库的引用:“Active 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# 转换值。感谢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 库出现问题,并且不需要此列表中的答案。
于 2012-11-20T14:37:46.287 回答
1
我得到了解决方案,我们可以通过这个属性HighestCommittedUsn获得域控制器的最大 usnchanged 值
于 2012-06-09T08:57:15.943 回答