aufder
Goto Top

Active Directory: letzte Benutzer oder Workstation-Anmeldung auslesen

letzte Benutzer oder Workstation-Anmeldung aus dem Active Directory auslesen

Hallo Admins!

Habe jetzt schon mehrere Foren-Einträge durchforstet, aber keiner trifft so richtig mein Problem.
Ich suche ein Programm, mit dem ich folgende Daten aus dem AD auslesen kann.
Das Tool soll am besten tabellarisch, oder in der AD-Verwaltung selbst den letzen Anmeldezeitpunkt eines Benutzers bzw.
einer Workstation anzeigen.
Ich hatte mal ein Programm, das einen zusätlichen Reiter in der AD-Verwaltung mit diesen Infos eingetragen hat, jedoch finde ich es nicht wieder. Am liebsten wäre mir aber wie beschrieben eine tabellarische Aufbereitung.
Vielen Dank im Voraus!

Gruß
Stefan

Content-ID: 26401

Url: https://administrator.de/contentid/26401

Ausgedruckt am: 25.11.2024 um 13:11 Uhr

meinereiner
meinereiner 20.02.2006 um 08:45:42 Uhr
Goto Top
http://www.systemtools.com/hyena/ sollte das können. Auch sonst ist es ein tolles Tool.
In einer 2003 Domäne müsstest du deine Infos aber auch direkt über eine Abfrage in "AD Benutzer und Computer" bekommen könen.
aufder
aufder 20.02.2006 um 09:05:27 Uhr
Goto Top
Leider haben wir nur eine 2000er Domäne. In HYENA und Dameware habe ich es auch schon gesucht, aber leider nichts gefunden.
25510
25510 20.02.2006 um 09:23:01 Uhr
Goto Top
Bat-Datei anlegen:

@echo off
usrstat up | grep %1
pause
exit

Datei aus den W2k-Server-Admintools: Usrstat.exe

Den Pfad mit der bat-Datei in PATH eintragen.
Unter der Konsole kannst du mit "batdatei-name userlogin" auch von mehreren DC den Login abfragen (dauert)
meinereiner
meinereiner 20.02.2006 um 09:41:58 Uhr
Goto Top
Ich habe noch eine ältere Version von Heyena hier und da kann ich es abrufen.

Domain Users aufrufen, rechte Maustaste "View all Users Details"
Ich musste allerdings noch in den Optionen unter Users das Häkchen bei "Show last logon/logoff information" setzen
aufder
aufder 20.02.2006 um 11:29:26 Uhr
Goto Top
Super, danke! Nach dem Setzen der Optionen in HYENA bekomme ich es angezeigt. Hab mal geschaut, ob es eine Möglichkeit gibt die Informationen tabellarisch anzeigen zu lassen, aber nichts gefunden. Vielleicht kennst du eine Lösung die "letzten Anmeldezeitpunkte" in HYENA tabellarisch auf einem Blick anzeigen zu lassen?
meinereiner
meinereiner 20.02.2006 um 11:34:39 Uhr
Goto Top
Wenn ich es bei mir mache, bekomme ich es Tabellarisch und kanns auch sortieren lassen wie ich will.
Man kann auch einen Report in Access erstellen lassen. Dazu muss man aber in den Settings unter Reporting den Pfad zu Access eingeben.
problemsolver
problemsolver 28.01.2010 um 14:01:50 Uhr
Goto Top
Hallo,

auch wenn das Problem bzw der Thread schon älter ist, bin ich bei der Suche auf Google darauf gestoßen.

Es wird sicherlich jemanden helfen, wenn ich hier ein VB-Script poste, was mehr oder weniger zusammengeklaut und gebastelt ist, aber den Sinn und Zweck gut erfüllt bei Computern im AD. Es funktioniert sogar mit mehreren DCs.

empfohlener Aufruf: cscript <scriptname> //NoLogo > test.csv

Gruß

Markus

' LastLogon.vbs  
' VBScript program to determine when each computer in the domain last logged  
' on.  
'  
Option Explicit

if not IsHostCscript() then
wscript.echo("Bitte mit cscript <scriptname> starten!!!")  
wscript.quit
end if


Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery
Dim adoRecordset, objDC
Dim strDNSDomain, objShell, lngBiasKey, lngBias, k, arrstrDCs()
Dim strDN, dtmDate, objDate, objList, strUser, objList_LogonServer
Dim strBase, strFilter, strAttributes, lngHigh, lngLow

' Use a dictionary object to track latest lastLogon for each user.  
Set objList = CreateObject("Scripting.Dictionary")  
objList.CompareMode = vbTextCompare
' Anmeldeserver mit abspeichern!  
Set objList_LogonServer = CreateObject("Scripting.Dictionary")  
objList.CompareMode = vbTextCompare

' Obtain local Time Zone bias from machine registry.  
' Die lokale Zeitzone des Rechners bestimmen, an dem dieses Script ausgeführt wird.  
' Der Wert aus der Registry wird dann mit in die Berechnung des Anmeldezeitpunkts einbezogen  
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

' Determine configuration context and DNS domain from RootDSE object.  
Set objRootDSE = GetObject("LDAP://RootDSE")  
strConfig = objRootDSE.Get("configurationNamingContext")  
strDNSDomain = objRootDSE.Get("defaultNamingContext")  

' Use ADO to search Active Directory for ObjectClass nTDSDSA.  
' This will identify all Domain Controllers.  
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

' Enumerate parent objects of class nTDSDSA. Save Domain Controller  
' AdsPaths in dynamic array arrstrDCs.  
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

' Retrieve lastLogon attribute for each user on each Domain Controller.  
' Das lastLogon Attribut für jeden User auf jedem DC ermitteln. Der höchste Wert aller DC's gewinnt  
For k = 0 To Ubound(arrstrDCs)
    strBase = "<LDAP://" & arrstrDCs(k) & "/" & strDNSDomain & ">"  
    strFilter = "(&(objectCategory=Computer)(objectClass=Computer))"  
    strAttributes = "distinguishedName,lastLogon,cn,dNSHostName"  
    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
					objList_LogonServer.Item(strDN) = arrstrDCs(k) & ";" & adoRecordset.Fields("cn").Value & ";" & adoRecordset.Fields("dNSHostName").Value  
                End If
            Else
                objList.Add strDN, dtmDate
				objList_LogonServer.Add strDN, arrstrDCs(k) & ";" & adoRecordset.Fields("cn").Value & ";" & adoRecordset.Fields("dNSHostName").Value  
            End If
            adoRecordset.MoveNext
        Loop
        adoRecordset.Close
    End If
Next

' Output latest lastLogon date for each user.  
For Each strUser In objList.Keys
    Wscript.Echo strUser & ";" & objList.Item(strUser) & ";" & objList_LogonServer.Item(strUser)  
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


function IsHostCscript()

    on error resume next
    
    dim strFullName 
    dim strCommand 
    dim i, j 
    dim bReturn
    
    bReturn = false
    
    strFullName = WScript.FullName
    
    i = InStr(1, strFullName, ".exe", 1)  
    
    if i <> 0 then
        
        j = InStrRev(strFullName, "\", i, 1)  
        
        if j <> 0 then
            
            strCommand = Mid(strFullName, j+1, i-j-1)
            
            if LCase(strCommand) = "cscript" then  
            
                bReturn = true  
            
            end if    
                
        end if
        
    end if
    
    if Err <> 0 then
    
        wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description 
        
    end if
    
    IsHostCscript = bReturn

end function
dieablo
dieablo 10.06.2010 um 10:32:47 Uhr
Goto Top
Hi Markus,

die csv ist leer.
Woran kann das liegen ?

Danke !

Lg