Jump to content

AD - Last USer Login auslesen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

Hi Leute

 

ich habe folgendes Problem. Ich soll für einen Kunden sein AD auslesen und feststellen wann sich die angelegten User im AD das letzte mal angemeldet haben - Last Login

 

Das kann ich mit einzenlen Tools zwar pro User nachlesen, da ich haber viel hundert User im AD angelegt habe ist das einzeln keine Option.

Offenbar sollen die User die lange nicht mehr angemeldet waren gesperrt bzw. gelöscht werden weil die einfach nicht gelöscht wurden nachdem sie das Unternehmen verlassen haben....

 

hat da jemand einen TIp für mich?? vll. sogar einen wo ich mir das in eine Datei ausgeben kann??

 

Danke für Eure Hilfe

Link to post

Servus,

 

wann sich der Benutzer das letzte Mal an der Domäne authentisiert hat, wird im Attribut Last-Logon gespeichert. Der Nachteil von diesem Attribut ist, dass es nicht zwischen den DCs repliziert wird. Somit müsste man jeden einzelnen DC in der Domäne abfragen, um das aktuellste Datum zu erhalten.

 

Daher ist es empfehlenswert, dass Attribut Last-Logon-TimeStamp zu nutzen da dieses Attribut zwischen den DCs repliziert wird. Das Attribut wird allerdings verzögert (ca. 10-11 Tage) aktualisiert, reicht aber für eine Aufräumaktion allemal. Dieses Attribut kann aber erst ab dem Domänenfunktionsmodus "Windows Server 2003" genutzt werden.

 

Siehe:

 

LDAP://Yusufs.Directory.Blog/ - Die letzte Benutzeranmeldung herausfinden

Link to post

Wenn der Kunde wirklich Accounts nach verlassen der Mitarbeiter nicht gelöscht hat sollte das Problem auch behoben werden. Wieso wird nicht einfach einen vergleich zwischen der Personalliste und der Userliste gemacht. Evtl. ist ein Mitarbeiter 3 Monate im Urlaub ;)

Link to post

Zuerstmal danke für die rasche Hilfe

 

Die Personalliste ist mir auch eingefallen aber bei 3000 MA ist das leider kein Zeitaufwand von wenigen Minuten...

 

ich habe abere in nettes VB Script gefunden das ich ein wenig adaptiert habe...

 

 

das hat mir die infos gebracht die ich benötige.. denn wenn ein User länger als 1 Jahr nicht angemeldet war (oder gar noch nie) benötigt er den USer nicht mehr.. alles unter einem Jahr (oder 3 Monate bis z.B. vor zwei Wochen) kann man dann mit der Personalliste vergleichen.. das geht dann wirklich innerhalb von wenigen Minuten.

Link to post

Option Explicit

 

Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery

Dim adoRecordset, objDC

Dim strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs()

Dim strDN, dtmDate, objDate, objList, strUser

Dim strBase, strFilter, strAttributes, lngHigh, lngLow

Dim inhalt

 

Set objList = CreateObject("Scripting.Dictionary")

objList.CompareMode = vbTextCompare

Set objShell = CreateObject("Wscript.Shell")

lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _

& "TimeZoneInformation\ActiveTimeBias")

If (UCase(TypeName(lngBiasKey)) = "LONG") Then

lngBias = lngBiasKey

ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then

lngBias = 0

For k = 0 To UBound(lngBiasKey)

lngBias = lngBias + (lngBiasKey(k) * 256^k)

Next

End If

 

Set objRootDSE = GetObject("LDAP://RootDSE")

strConfig = objRootDSE.Get("configurationNamingContext")

strDNSDomain = objRootDSE.Get("defaultNamingContext")

 

Set adoCommand = CreateObject("ADODB.Command")

Set adoConnection = CreateObject("ADODB.Connection")

adoConnection.Provider = "ADsDSOObject"

adoConnection.Open "Active Directory Provider"

adoCommand.ActiveConnection = adoConnection

 

strBase = "<LDAP://" & strConfig & ">"

strFilter = "(objectClass=nTDSDSA)"

strAttributes = "AdsPath"

strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"

 

adoCommand.CommandText = strQuery

adoCommand.Properties("Page Size") = 100

adoCommand.Properties("Timeout") = 60

adoCommand.Properties("Cache Results") = False

 

Set adoRecordset = adoCommand.Execute

 

k = 0

Do Until adoRecordset.EOF

Set objDC = _

GetObject(GetObject(adoRecordset.Fields("AdsPath").Value).Parent)

ReDim Preserve arrstrDCs(k)

arrstrDCs(k) = objDC.DNSHostName

k = k + 1

adoRecordset.MoveNext

Loop

adoRecordset.Close

 

For k = 0 To Ubound(arrstrDCs)

strBase = "<LDAP://" & arrstrDCs(k) & "/" & strDNSDomain & ">"

strFilter = "(&(objectCategory=person)(objectClass=user))"

strAttributes = "distinguishedName,lastLogon"

strQuery = strBase & ";" & strFilter & ";" & strAttributes _

& ";subtree"

adoCommand.CommandText = strQuery

On Error Resume Next

Set adoRecordset = adoCommand.Execute

If (Err.Number <> 0) Then

On Error GoTo 0

Wscript.Echo "Domain Controller not available: " & arrstrDCs(k)

Else

On Error GoTo 0

Do Until adoRecordset.EOF

strDN = adoRecordset.Fields("distinguishedName").Value

On Error Resume Next

Set objDate = adoRecordset.Fields("lastLogon").Value

If (Err.Number <> 0) Then

On Error GoTo 0

dtmDate = #1/1/1601#

Else

On Error GoTo 0

lngHigh = objDate.HighPart

lngLow = objDate.LowPart

If (lngLow < 0) Then

lngHigh = lngHigh + 1

End If

If (lngHigh = 0) And (lngLow = 0) Then

dtmDate = #1/1/1601#

Else

dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _

+ lngLow)/600000000 - lngBias)/1440

End If

End If

If (objList.Exists(strDN) = True) Then

If (dtmDate > objList(strDN)) Then

objList.Item(strDN) = dtmDate

End If

Else

objList.Add strDN, dtmDate

End If

adoRecordset.MoveNext

Loop

adoRecordset.Close

End If

Next

' Output latest lastLogon date for each user.

For Each strUser In objList.Keys

Open "C:\temp\roman.txt" For Output As #1

Print #1, inhalt

Close #1

If (objList.Item(strUser) = #1/1/1601#) Then

inhalt = strUser & ";Never"

Else

inhalt = strUser & ";" & objList.Item(strUser)

End If

Next

 

' Clean up.

adoConnection.Close

Set objRootDSE = Nothing

Set adoConnection = Nothing

Set adoCommand = Nothing

Set adoRecordset = Nothing

Set objDC = Nothing

Set objDate = Nothing

Set objList = Nothing

Set objShell = Nothing

 

aufgerufen wird es mit cscript "datei.vbs" >> c:\test.txt

Link to post
  • 2 weeks later...

Hallo,

 

keine Ahnung, ob das Thema noch aktuell ist, aber hier mein Vorschlag:

 

Es gibt von MS eine DLL (acctinfo.dll). Wenn die auf dem DC oder einem Rechner mit den Admin-Tools eingebunden wird, erscheint ein weiterer Reiter. Dort stehen dann die Logon/Logoff Zeiten, wann läuft das PW ab und so weiter.

 

mfg

 

srkonus

Link to post

Es gibt von MS eine DLL (acctinfo.dll). Wenn die auf dem DC oder einem Rechner mit den Admin-Tools eingebunden wird, erscheint ein weiterer Reiter. Dort stehen dann die Logon/Logoff Zeiten, wann läuft das PW ab und so weiter.

 

Die DLL ist in den Account Lockout Tools enthalten. Hier gibts weitere Infos dazu: Account Lockout Tools Download der Tools: http://www.microsoft.com/downloads/details.aspx?FamilyId=7AF2E69C-91F3-4E63-8629-B999ADDE0B9E&displaylang=en

Link to post
  • 7 years later...

Dieses Script ist toll aber kann man das auch noch derart erweitern, dass dann in der Zeile auch noch der Clientname auftaucht, auf den sich der Anwender zuletzt angemeldet hat?

 

Also wenn die PCs der Firma alle zum Beispiel Microsoft-P001, Microsoft-P002 etc heißen soll der Name das PCs, auf den sich der User zuletzt angmeldet hat mit angezeigt werden.

 

Kann sowas schnell einfügen oder ist das zu kompliziert?

 

Danke

Link to post

Soweit ich weiss geht das nicht, ohne das Ereignisprotokoll der Rechner auszulesen.

 

Zu Zeiten von Windows 2003 habe ich dafür mal ein VBS gebastelt, welches als Anmeldescript lief und Zeit, Benutzername und Datum in eine Access-DB eingetragen hat. Dieses habe ich vor einiger Zeit nach .NET mit SQLite als Datenbank umgeschrieben. Kann die Sourcen und die EXE gerne zur Verfügung stellen.

Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...