【发布时间】:2012-06-09 04:08:11
【问题描述】:
我想使用 C# 通过 ActiveDirectory 中的 uSNChanged 值获取最后修改或创建的属性...我还试图找到 uSNChanged 的最大值,你能帮我找出解决方案吗?谢谢
【问题讨论】:
标签: c# active-directory directoryservices
我想使用 C# 通过 ActiveDirectory 中的 uSNChanged 值获取最后修改或创建的属性...我还试图找到 uSNChanged 的最大值,你能帮我找出解决方案吗?谢谢
【问题讨论】:
标签: c# active-directory directoryservices
有两种方法可以通过 .NET 检索 uSNChanged 属性:
包含对 COM 库的引用:“Active DS 类型库”,然后您需要使用 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 = 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 库出现问题,并且不需要通过 this list 提供答案。
【讨论】:
我得到了解决方案,我们可以通过这个属性HighestCommittedUsn获得域控制器的最大usnchanged值
【讨论】: