public static DateTime GetSystemLastShutdownTime() { //string sKey = @"System\CurrentControlSet\Control\Windows"; //Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sKey); //string sValueName = "ShutdownTime"; //byte[] val = (byte[])key.GetValue(sValueName); //long valueAsLong = BitConverter.ToInt64(val, 0); //return DateTime.FromFileTime(valueAsLong); if (EventLog.Exists("System")) { var log = new EventLog("System", Environment.MachineName, "EventLog"); var entries = new EventLogEntry[log.Entries.Count]; log.Entries.CopyTo(entries, 0); var startupTimes = entries.Where(x => x.InstanceId == 2147489653).Select(x => x.TimeWritten); var shutdownTimes = entries.Where(x => x.InstanceId == 2147489654).Select(x => x.TimeWritten); if (shutdownTimes != null && shutdownTimes.Count() != 0) { return(shutdownTimes.Max()); } else { return(DateTime.MinValue); } } else { return(DateTime.MinValue); } }
/// <summary> /// Accepts an Event Log Name and log level. Returns all log entries for that Event Log and level /// The default log (if none is specified) is the Application log and default log level is FailueAudit /// </summary> /// <param name="eventLogName">Name of the event log.</param> /// <param name="logType">Type of the log.</param> /// <param name="onlyEventsEqualTo"></param> /// <returns>List<EvengLogEntry /> EventList</returns> public static List <EventLogEntry> GetEvents <T>(string eventLogName = "Application", EventLogEntryType logType = EventLogEntryType.FailureAudit, bool onlyEventsEqualTo = false) { int num = 0; EventLog = new EventLog { Log = eventLogName }; EventLogEntryCollection entries = EventLog.Entries; EventLogEntry[] array = new EventLogEntry[entries.Count]; try { foreach (EventLogEntry item in entries) { int entryType = (int)item.EntryType; switch (onlyEventsEqualTo) { case false: if (entryType <= (int)logType) { array[num] = item; num++; } break; case true: if (entryType == (int)logType) { array[num] = item; num++; } break; } } } catch (Exception) { } return(array.Where((EventLogEntry rec) => rec != null).ToList()); }
public static void GenerateFile(string filename, string logName) { Console.WriteLine($"Getting event logs for {logName}"); File.AppendAllLines(filename, new[] { $"{"LEVEL", -20} {"DATE", -25} {"Source", -30} {"EventID", -8} MESSAGE" }); using (var eventLog = new EventLog(logName)) { EventLogEntry[] entries = new EventLogEntry[eventLog.Entries.Count]; eventLog.Entries.CopyTo(entries, 0); foreach (EventLogEntry entry in entries.Where(e => e.TimeGenerated > DateTime.Today.AddDays(-60)).OrderBy(e => e.TimeGenerated)) { File.AppendAllLines(filename, new[] { $"{entry.EntryType,-20} {entry.TimeGenerated,-25} {entry.Source,-30} {entry.InstanceId,-8} {entry.Message}" }); } } }