Мне нужно иметь возможность извлекать записи журнала событий для Hyper-V как часть системы мониторинга, которую мы используем. На данный момент я использую VBScript и WMI и сделать что-то вроде:Чтение журналов событий Hyper-V
query = "Select * from Win32_NTLogEvent where LogFile = 'System' and TimeGenerated >= '" & last_check & "'"
set wmi_objectset = wmi_service.ExecQuery(query, "WQL", &h30)
и это прекрасно работает, но получает только некоторые из журналов Hyper-V не все. Некоторые из Google считают, что нет никакого способа обойти это, и MS не создали возможность читать все журналы Hyper-V в WMI. Поэтому мне нужен другой подход.
Подробнее Googling нашел код C# для чтения журналов событий, и это будет хорошо, поскольку я счастлив использовать C# вместо VBScript. Проблема в том, что, хотя я могу читать стандартные журналы, например Система и Приложение Я не могу разобраться, как читать журнал Hyper-V, который я хочу. Код выглядит следующим образом:
eventLog = new EventLog();
eventLog.Log = eventLogName;
foreach (EventLogEntry log in eventLog.Entries)
{
Если установить eventLogName в «System», то он работает и читает обратно все записи журнала (и это впечатляюще быстро). Но мне нужны записи из журнала Microsoft-Windows-Hyper-V-VMMS-Admin. Если установить eventLogName в "Microsoft-Windows-Hyper-V-VMMS-Admin" я получаю исключение:
Unhandled Exception: System.InvalidOperationException: The event log 'Microsoft-Windows-Hyper-V-VMMS-Admin' on computer '.' does not exist.
Журнал действительно существует, и команду PowerShell:
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-VMMS-Admin
делает извлечение событий, поэтому проблема, по-видимому, является правильным способом указать имя журнала для объекта EventLog.
Так что мой вопрос заключается в том, что использовать в моей программе на C#, чтобы получить записи в журнале администратора VMMS Hyper-V.
Сервер, на котором я тестирую, - это 2012R2, хотя я не думаю, что проблема связана с точной версией Windows. Существуют и другие способы получения данных журнала, таких как Get-WinEvent или wevtutil, но я бы предпочел, чтобы программа C# работала, и использование альтернативного метода было бы последним средством.
Это работает!Спасибо Jeroen :-) Я пробовал использовать EventLogQuery/EventLogReader, но, очевидно, неправильно понял. Во всяком случае, теперь он работает. –