2016-10-03 3 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

입니다. long longLogon = (long) sr.Properties [ "lastLogon"] [0]; 또는 ds.PropertiesToLoad.AddRange (새 문자열 [] 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() 
관련 문제