Announcement

Collapse
No announcement yet.

EventLog auslesen (Anmeldung/Abmeldung)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EventLog auslesen (Anmeldung/Abmeldung)

    Hallo ,

    ich versuche auf einem lokalen Computer herauszufinden wann ich mich angemeldet bzw. abgemeldet habe, jetzt steht das alles im EventLog jedoch auch die Systemeigenen An-/Abmeldungen.

    Hat jemand schonmal sowas gemacht und kann mir Tipps geben wie das alles funktioniert, würde gerne über die EventIds gehen doch weiß ich nicht welche ID zu welchem Ereignis gehören. Gibts da irgendwo eine Liste?? (Habe nichts gefunden)

    Danke

  • #2
    Hallo Floschi,

    versuche es doch mal so. Ob das der elegante Weg ist, kann ich Dir nicht sagen - aber es sollte funktionieren.

    Ich weiß nicht welches OS Du hast, eventuell kann die EventID abweichen, die müsstest Du dann durch die richtige ersetzen.

    Gruß

    Sk

    [highlight=c#]
    // WICHTIG: Der Verweis System.Management muss hinzugefügt werden
    using System;
    using System.Management;

    namespace Demo
    {
    class Program
    {
    static void Main(string[] args)
    {
    // Benutzername festlegen
    string userName = "MyUsername";

    // WQL-Abfrage festlegen
    string wqlQuery = @"SELECT TimeGenerated FROM Win32_NTLogEvent WHERE Logfile = 'Security' AND EventCode = 4624 AND Message LIKE '%[USERNAME]%'";

    // WMI-Abfrage durchführen
    using (ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(@"ROOT\CIMV2", wqlQuery.Replace("[USERNAME]", userName)))
    foreach (ManagementObject mObject in mSearcher.Get())
    {
    // Ergebnis ermitteln
    string timeString = mObject.GetPropertyValue("TimeGenerated").ToString ();

    // Ergebnis aufbereiten
    int logonYear = Convert.ToInt32(timeString.Substring(0, 4));
    int logonMonth = Convert.ToInt32(timeString.Substring(4, 2));
    int logonDay = Convert.ToInt32(timeString.Substring(6, 2));
    int logonHour = Convert.ToInt32(timeString.Substring(8, 2));
    int logonMinute = Convert.ToInt32(timeString.Substring(10, 2));
    int logonSecond = Convert.ToInt32(timeString.Substring(12, 2));

    DateTime logonTime = new DateTime(logonYear, logonMonth, logonDay, logonHour, logonMinute, logonSecond);

    // Anmeldezeit ausgeben
    Console.WriteLine("Anmeldung [{0}]:\t{1}", userName, logonTime.ToLocalTime().ToString());
    }
    }
    }
    }
    [/highlight]
    Zuletzt editiert von sk197666; 11.05.2009, 00:33.

    Comment


    • #3
      Hallo,

      Login bzw. Logoff kann auch mittels
      [highlight=c#]
      using System;
      using System.DirectoryServices;

      namespace ConsoleApplication1
      {
      class Program
      {
      static void Main(string[] args)
      {
      DirectoryEntry dirs =
      new DirectoryEntry("WinNT://" + Environment.MachineName);

      foreach (DirectoryEntry entry in dirs.Children)
      {
      if (entry.SchemaClassName != "User")
      continue;

      Console.WriteLine();
      Console.WriteLine(entry.Name);

      if (entry.Properties["lastlogin"].Value != null)
      Console.WriteLine(entry.Properties["lastlogin"].Value);

      if (entry.Properties["lastlogoff"].Value != null)
      Console.WriteLine(entry.Properties["lastlogoff"].Value);
      }

      Console.ReadKey();
      }
      }
      }
      [/highlight]
      abgefragt werden. Dies ist die Vorgehensweise bei ActiveDirectory und geht auch bei "Standalone"-PCs. Beim lastlogoff ist bei WinXP (zumindest bei meiner Installation) kein Eintrag vorhanden.

      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Servus,

        das geht auch, hat allerdings folgende Nachteile:

        1. Du bekommst nur das letzte Login (bzw. Logout) zurück, nicht aber alle (sofern das benötigt wird).

        2. Im AD wird dieser Wert pro DC geschrieben. Hast Du mehrere DCs im Einsatz, musst Du die Abfrage auf jedem einzelnen durchführen und den letzten ermitteln - denn dieses Attribut gehört zu denen, die nicht repliziert werden.

        Gruß

        Sk

        Comment

        Working...
        X