2017-01-09 3 views
-2

Active Directoryユーザーアカウントのlastlogonフィールドを取得しています。私は例外を取得長い時間にログオンしていないアカウントの場合に気づいた:lastlogonをADからdatetimeにキャストするにはどうすればよいですか?

Exception type: ArgumentOutOfRangeException 
Exception message: Index was out of range. Must be non-negative and less than the size of the collection. 

パラメータ名:インデックス

コードは以下の通りです:

long lastLogon = (long)sr.Properties["lastLogon"][0]; 
DateTime dtLastLogon = DateTime.FromFileTime(lastLogon); 

はですこれをキャストしてその例外を処理する適切な方法がありますか? DateTimeへの変換で

sr.Properties["lastLogon"][0] 

及びません:私は、エラーがここに実際にあると思われるエラーメッセージに基づいて

おかげ

+0

'lastLogon'の値は何ですか?それは価値を持っていますか、それとも0ですか? –

+0

値は0、または決して – dotnetdev

答えて

1

sr.Properties["lastLogon"]の長さのチェックを追加して、[0]を呼び出す前に長さが少なくとも1であることを確認します。あなたはその場合、にしてください。

+0

です。 :)タイムスタンプが大きい値なので、ユーザーが長い間ログインしていないとコードがエラーになるケースはありますか? – dotnetdev

+0

うん。このエラーに基づいて、 'sr.Properties [" lastLogon "]'は長さ0の配列です。 – ebyrob

+0

@dotnetdev 'fileTime'は、1601年以降の64ビットの数値です。https://msdn.microsoft.com/en-us/library/system.datetime.fromfiletime(v=vs.110).aspx何か将来この値が大きすぎると問題があります。それは逆方向に数えるデルタではないので、過去の値はあまりオーバーフローしないでしょう。 – ebyrob

関連する問題