Zum Inhalt wechseln


Foto

AD - Last USer Login auslesen


  • Bitte melde dich an um zu Antworten
10 Antworten in diesem Thema

#1 Osmo

Osmo

    Member

  • 164 Beiträge

 

Geschrieben 01. Juni 2010 - 12:03

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
Danke

Roman
MCP, MCSA, MCITP

#2 Daim

Daim

    Expert Member

  • 4.542 Beiträge

 

Geschrieben 01. Juni 2010 - 12:25

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
Viele Grüße aus Mainz
Yusuf Dikmenoglu
LDAP://Yusufs.Directory.Blog/
Twitter: YusufsDSBlog

#3 Dukel

Dukel

    Board Veteran

  • 9.313 Beiträge

 

Geschrieben 01. Juni 2010 - 12:29

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 ;)

#4 Osmo

Osmo

    Member

  • 164 Beiträge

 

Geschrieben 01. Juni 2010 - 12:47

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.
Danke

Roman
MCP, MCSA, MCITP

#5 Osmo

Osmo

    Member

  • 164 Beiträge

 

Geschrieben 01. Juni 2010 - 12:48

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
Danke

Roman
MCP, MCSA, MCITP

#6 Daim

Daim

    Expert Member

  • 4.542 Beiträge

 

Geschrieben 01. Juni 2010 - 12:58

Du hast du Quellangabe vergessen!

Hier die Quelle:

http://www.rlmueller...onTimeStamp.txt
Viele Grüße aus Mainz
Yusuf Dikmenoglu
LDAP://Yusufs.Directory.Blog/
Twitter: YusufsDSBlog

#7 srkonus

srkonus

    Senior Member

  • 398 Beiträge

 

Geschrieben 15. Juni 2010 - 13:57

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

#8 NilsK

NilsK

    Expert Member

  • 12.468 Beiträge

 

Geschrieben 15. Juni 2010 - 14:12

Moin,

die einfachste und leistungsfähigste Variante für die obige Anforderung: OldCMP von joeware.net (ja, das kann auch User, nicht nur Computer).

Gruß, Nils

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#9 Sunny61

Sunny61

    Expert Member

  • 22.243 Beiträge

 

Geschrieben 15. Juni 2010 - 14:15

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...&displaylang=en
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#10 Daim

Daim

    Expert Member

  • 4.542 Beiträge

 

Geschrieben 15. Juni 2010 - 17:02

Servus,

Es gibt von MS eine DLL (acctinfo.dll).


warum mache ich mir eigentlich die Arbeit, wenn keiner die Links die man postet (siehe Link in meiner ersten Antwort!) sich anschaut. :rolleyes:
Viele Grüße aus Mainz
Yusuf Dikmenoglu
LDAP://Yusufs.Directory.Blog/
Twitter: YusufsDSBlog

#11 srkonus

srkonus

    Senior Member

  • 398 Beiträge

 

Geschrieben 15. Juni 2010 - 20:25

Entschuldigung