2012-03-26 2 views
1

Кто-нибудь знает, можно ли сохранить журналы событий Windows с заданного интервала времени в виде текстового файла с C#? Например, я хочу сохранить журналы системных событий с 10-11 утра в текстовом файле. Если возможно, у кого-нибудь есть ссылка на хороший учебник или, может быть, фрагмент кода, который может заставить меня идти? Я искал в Интернете, но не могу получить то, что я ищу.Используйте C# для сбора журналов событий за определенный период времени

ответ

1

Просто добавив информацию для других о том, как фильтровать журналы событий по диапазону времени как часть запроса WMI.

Обратите внимание, что «TimeGenerated» - это когда происходят события и «TimeWritten», когда они регистрируются. «RecordNumber» - уникальный индекс, полезный для предотвращения столкновения или дублирования ведения журнала.

System.Management.ManagementDateTimeConverter, который преобразует между C# DateTime и WMI CIM_DATETIME форматом. Но имейте в виду, что он делает UTC CIM в LOCAL DateTime, оставляя Kind Unspecified, поэтому установите Kind после этого, чтобы избежать головных болей!

Это пример для захвата сбоев безопасности (для отслеживания локаута) в течение последних 30 минут:

private void SearchEventViewer(string computerName, string userName, string userPass) 
{ 
    var scope = CreateManagementScope(computerName, userName, userPass); 
    var startTime = ManagementDateTimeConverter.ToDmtfDateTime(DateTime.UtcNow.AddMinutes(-30)); 
    var query = new SelectQuery("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'Security' AND EventType = '5' AND TimeGenerated > '" + startTime + "'"); 

    using (var searcher = new ManagementObjectSearcher(scope, query)) 
    { 
     var result = searcher.Get(); 

     foreach (var item in result) 
     { 
      var eventTimeLocal = DateTime.SpecifyKind(ManagementDateTimeConverter.ToDateTime(item["TimeGenerated"].ToString()), DateTimeKind.Local); 
      var eventTimeUtc = eventTimeLocal.ToUniversalTime(); 

      var eventDetails = item["Message"].ToString().Replace("\r\n\r\n", "\r\n"); 
      eventDetails += "\r\nEventCode: "  + item["EventCode"]; 
      eventDetails += "\r\nCatogory: "  + item["Category"]; 
      eventDetails += "\r\nRecord Number: " + item["RecordNumber"]; 
      eventDetails += "\r\nLocal Time: " + eventTimeLocal.ToString("yyyy-MM-dd HH:mm:ss"); 

      // Do something... 
     } 
    } 
} 

private ManagementScope CreateManagementScope(string computerName, string username = "", string password = "") 
{ 
    var managementPath = @"\\" + computerName + @"\root\cimv2"; 
    var scope = new ManagementScope(managementPath); 

    if (username != "" && password != "") 
    { 
     scope.Options = new ConnectionOptions 
     { 
      Username = username, 
      Password = password, 
      Impersonation = ImpersonationLevel.Impersonate, 
      Authentication = AuthenticationLevel.PacketPrivacy 
     }; 
    } 

    return scope; 
} 
Смежные вопросы