public static string GetProperty(SearchResult searchResult, string PropertyName)
{
if (searchResult.Properties.Contains(PropertyName))
{
return searchResult.Properties[PropertyName][0].ToString();
}
else
{
return string.Empty;
}
}
上記の方法は、pwdLastSet、maxPwdAge などの日付/時刻に関連するものを除いて、ほとんどの Active Directory プロパティでうまく機能します。
私の質問は、pwdLastSet を人間が読める日時 (2013 年 8 月 13 日や 2013 年 8 月 13 日など) に取得する方法です。
これを試しましたが、例外がスローされました
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;
}
次のコードを使用して、時間を Int64 として取得しています
Int64 passwordLastSet = ConvertADSLargeIntegerToInt64(objResult.Properties["pwdLastSet"][0]);
次に、DateTime(Int64) コンストラクターを使用して DateTime を作成する予定です