Jump to content

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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:

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Auf den DCs die erfolgreichen Anmeldungen protokollieren sollte auch reichen. In den entsprechenden Security-Event sollte  der Remote-Client stehen. 

Man muss aber u.U. alle DCs abfragen.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Moin,

 

und nächstes Mal bitte in einem neuen Thread und nicht in einem, der siebeneinhalb Jahre alt ist und eine andere Frage behandelte.

 

Gruß, Nils

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

×