2016-10-03 6 views
0

lastlogontimestampをdatetimeに変換しようとしていますが、大きな値がわかりました。例外メッセージが表示されます。インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。lastlogontimestampをDateTimeに変換する

下記の方法がありますか?

var de = new DirectoryEntry("LDAP://GLOBAL.ABC.COM"); 
var ds = new DirectorySearcher(de); 
ds.Filter = string.Format("(&(objectCategory=user)(objectClass=user)({0}={1}))", 
    "samAccountName", username); 
ds.PropertiesToLoad.AddRange(new string[] { "samAccountName", "lastLogon" }); 
SearchResult sr = ds.FindOne(); 
long lastLogon = (long)sr.Properties["lastLogon"][0]; 
// lastLogon is 131111471723190497 
var dtLastLogon = DateTime.FromFileTime(lastLogon); 
return dtLastLogon.ToString(); 
+0

「インデックスが範囲外です」というのはどちらですか? 「大きい値」の例を提供してください – Julian

+0

これはlastLogon変数を取得する行です。値は131111471723190497 – Blade1

+0

であり、 'lastLogon =(long)sr.Properties [" lastLogon "] [0];'または 'ds.PropertiesToLoad.AddRange(new string [] samAccountName"、 "lastLogon"})です。 '? – Julian

答えて

1

あなたの問題は、アカウントがlastLogon性質を持っている必要はないという事実です。したがって、コードは次のようになります

// ... 
SearchResult sr = ds.FindOne(); 
if (sr.Properties["lastLogon"] != null && sr.Properties["lastLogon"].Count > 0) 
{ 
    long lastLogon = (long)sr.Properties["lastLogon"][0]; 
    var dtLastLogon = DateTime.FromFileTime(lastLogon); 
    return dtLastLogon.ToString(); 
} 
// last logon is not set here - make something up; for example 
return DateTime.MinValue.ToString()