User-Anmeldung und -Abmeldung im Eventlog suchen

dila71

Mitglied
Hallo,

meine Aufgabe = mein Problem ist das folgende:
Ich muss/will aus dem Eventlog die An-und Abmeldungen eines bestimmten Users suchen.

Wie weit bin ich?
Also ich weiß, an die Eventlogeinträge komme ich über:

Code:
//Erzeugung
EventLog EvtLog = New System.Diagnostics.EventLog();
//Angabe des auszulesenden Ereignisprotokolls: 
EvtLog.Log = "Security";

Wenn ich das habe kann ich einfach über alle Entries iterieren und habe die EventLogEntry.
Soweit so gut, diese haben dann ein Property InstanceId welche der EventID unter Systemsteuerung/Verwaltung/Ereignisanzeige entspricht.
Die EventIDs habe ich auch, das sind für Login und Logout die 528 und 538 (VISTA 4624 und 4634).
In der Ereignisanzeige habe ich dann für dieses Ereignis die folgenden Infos, woran ich sehen kann... Ist das der gesuchte Nutzer?

Code:
Ein Konto wurde erfolgreich angemeldet.

Antragsteller:
	Sicherheits-ID:		SYSTEM
	Kontoname:		RECHNERNAME$
	Kontodomäne:		WORKGROUP
	Anmelde-ID:		0x3e7

Anmeldetyp:			2

Neue Anmeldung:
	Sicherheits-ID:		RECHNERNAME\Nutzername
	Kontoname:		Nutzername
	Kontodomäne:		RECHNERNAME
	Anmelde-ID:		0x51642
	Anmelde-GUID:		{00000000-0000-0000-0000-000000000000}
......


Mein Problem:
Wie komme ich an die Infos Sicherheits-ID: RECHNERNAME\Nutzername und Kontoname: Nutzername programmatisch ran? In den EventLogEntrys habe ich es nicht entdeckt, das scheint dann wohl der falsche Weg zu sein.


Vielen Dank für Eure Hilfe

DiLa
 
Man kann da anscheinend aus dem "ReplacementStrings" was rauslesen:
Code:
Imports System.Diagnostics

Module Module1
    Sub Main()
        Dim elog As New EventLog("Security")

        Dim anmeldungen = From eintrag As EventLogEntry In elog.Entries Where eintrag.InstanceId = 4625 Select eintrag

        Dim meineAnmeldungen = From eintrag As EventLogEntry In anmeldungen Where eintrag.ReplacementStrings(1) = "Markus" Select New With {.Benutzer = eintrag.ReplacementStrings(2) & "\" & eintrag.ReplacementStrings(1), .Uhrzeit = eintrag.TimeGenerated}

        For Each anmeldung In meineAnmeldungen
            Console.WriteLine(anmeldung)
        Next

        Console.ReadKey()
    End Sub
End Module

Im Eintrag mit Index 1 steht der Benutzername, im String mit Index 2 der Computername. Ob das auf andere Ereignisse auch zutrifft, weiß ich nicht.

Ergebnis:
{ Benutzer = PC01\Markus, Uhrzeit = 10.08.2008 23:22:21 }
{ Benutzer = PC01\Markus, Uhrzeit = 10.08.2008 23:22:22 }
{ Benutzer = PC01\Markus, Uhrzeit = 11.08.2008 02:36:00 }
{ Benutzer = PC01\Markus, Uhrzeit = 11.08.2008 06:53:00 }
{ Benutzer = PC01\Markus, Uhrzeit = 11.08.2008 06:53:01 }
{ Benutzer = PC01\Markus, Uhrzeit = 11.08.2008 10:54:15 }
{ Benutzer = PC01\Markus, Uhrzeit = 11.08.2008 10:54:15 }
{ Benutzer = PC01\Markus, Uhrzeit = 11.08.2008 13:00:58 }
{ Benutzer = PC01\Markus, Uhrzeit = 11.08.2008 13:00:59 }
 
Vielen Dank so geht es.
Offensichtlich hatte ich nur die falschen Ereignisse gefiltert. Mit einen Schubs auf die Replacementstrings ging es dannn.

ABER:
Kann es sein, dass die Position der Informationen variiert (oder hast du evtl. auf XP programmiert und nur die Eventnummern für das Post geändert)?
Du schreibst:
From eintrag As EventLogEntry In anmeldungen Where eintrag..ReplacementStrings(1) = "Markus" Select New With {.Benutzer = eintrag.ReplacementStrings(2) & "\" & eintrag.ReplacementStrings(1), .Uhrzeit = eintrag.TimeGenerated}
und bekommst als Ausgabe:
Benutzer = Rechnername\Benutzer Uhrzeit = Uhrzeit.

Ich habe (beim Login) am Index 1 den Rechnernamenund am Index 2 der ReplacementStrings steht bei den relevanten Ereignissen 'WORKGROUP'. Der gesuchte Nutzer steht an Index 5.

Noch einmal vielen Dank
DiLa
 
Ich programmiere auf Vista x64 Ultimate in einer Arbeitsgruppe.
Wenn das wirklich auf jedem PC variiert, ist das ja besch*****.
 
Zurück