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!

Empfohlene Beiträge

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 zu diesem Kommentar

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 zu diesem Kommentar

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 zu diesem Kommentar

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 zu diesem Kommentar
  • 2 Wochen später...

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 zu diesem Kommentar
  • 7 Jahre später...

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 zu diesem Kommentar

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 zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...