2017-01-09 3 views
-2

Ich lade das letzte Anmeldefeld für Active Directory-Benutzerkonten ab. Ich habe im Falle von Konten bemerkt, die in einer langen Zeit nicht angemeldet haben, erhalte ich eine Ausnahme:Wie lastlogon von AD nach datetime umwandeln?

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

Parametername: Index

Der Code ist unten:

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

Ist gibt es einen richtigen Weg dies zu tun und mit dieser Ausnahme umzugehen?

Dank

+0

Welchen Wert hat 'lastLogon'? Hat es einen Wert oder ist es 0? –

+0

Es hat einen Wert von 0 oder (nie) – dotnetdev

Antwort

1

auf der Fehlermeldung Basierend Ich vermute, dass der Fehler eigentlich hier ist:

sr.Properties["lastLogon"][0] 

und nicht in der Umstellung auf DateTime. Ich würde eine Überprüfung für die Länge von sr.Properties["lastLogon"] hinzufügen, um sicherzustellen, dass es eine Länge von mindestens 1 vor dem Aufruf [0] hat. Was Sie machen in diesem Fall liegt an Ihnen.

+0

Nur implementiert, dass. :) Würde es einen Fall geben, in dem der Code fehlerhaft ist, wenn sich der Benutzer seit langer Zeit nicht mehr eingeloggt hat, so dass der Zeitstempel ein großer Wert ist? – dotnetdev

+0

Ja. Basierend auf dem Fehler ist 'sr.Properties [" lastLogon "]' ein 0-Längen-Array. – ebyrob

+0

@dotnetdev 'fileTime' ist eine 64-Bit-Zahl, die Ticks seit 1601 https://msdn.microsoft.com/en-us/library/system.datetime.fromefiletime(v=vs.110).aspx zählt hätte Probleme damit, dass dieser Wert in der Zukunft zu groß ist. Es ist kein rückwärts zählendes Delta, so dass Werte in der Vergangenheit nicht mehr überlaufen. – ebyrob

Verwandte Themen