Osmo 10 Geschrieben 1. Juni 2010 Melden Teilen Geschrieben 1. Juni 2010 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 Zitieren Link zu diesem Kommentar
Daim 12 Geschrieben 1. Juni 2010 Melden Teilen Geschrieben 1. Juni 2010 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 Zitieren Link zu diesem Kommentar
Dukel 451 Geschrieben 1. Juni 2010 Melden Teilen Geschrieben 1. Juni 2010 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 ;) Zitieren Link zu diesem Kommentar
Osmo 10 Geschrieben 1. Juni 2010 Autor Melden Teilen Geschrieben 1. Juni 2010 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. Zitieren Link zu diesem Kommentar
Osmo 10 Geschrieben 1. Juni 2010 Autor Melden Teilen Geschrieben 1. Juni 2010 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 Zitieren Link zu diesem Kommentar
Daim 12 Geschrieben 1. Juni 2010 Melden Teilen Geschrieben 1. Juni 2010 Du hast du Quellangabe vergessen! Hier die Quelle: http://www.rlmueller.net/Programs/LastLogonTimeStamp.txt 1 Zitieren Link zu diesem Kommentar
srkonus 10 Geschrieben 15. Juni 2010 Melden Teilen Geschrieben 15. Juni 2010 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 Zitieren Link zu diesem Kommentar
NilsK 2.930 Geschrieben 15. Juni 2010 Melden Teilen Geschrieben 15. Juni 2010 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 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 15. Juni 2010 Melden Teilen Geschrieben 15. Juni 2010 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 Zitieren Link zu diesem Kommentar
Daim 12 Geschrieben 15. Juni 2010 Melden Teilen Geschrieben 15. Juni 2010 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: Zitieren Link zu diesem Kommentar
srkonus 10 Geschrieben 15. Juni 2010 Melden Teilen Geschrieben 15. Juni 2010 Entschuldigung Zitieren Link zu diesem Kommentar
MisterMi 0 Geschrieben 20. Dezember 2017 Melden Teilen Geschrieben 20. Dezember 2017 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 Zitieren Link zu diesem Kommentar
mwiederkehr 373 Geschrieben 20. Dezember 2017 Melden Teilen Geschrieben 20. Dezember 2017 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. Zitieren Link zu diesem Kommentar
zahni 550 Geschrieben 20. Dezember 2017 Melden Teilen Geschrieben 20. Dezember 2017 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. Zitieren Link zu diesem Kommentar
NilsK 2.930 Geschrieben 20. Dezember 2017 Melden Teilen Geschrieben 20. Dezember 2017 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.