【发布时间】:2017-06-05 17:40:01
【问题描述】:
作为我们使用的监控系统的一部分,我需要能够检索 Hyper-V 的事件日志条目。目前我使用 VBScript 和 WMI 并执行以下操作:
query = "Select * from Win32_NTLogEvent where LogFile = 'System' and TimeGenerated >= '" & last_check & "'"
set wmi_objectset = wmi_service.ExecQuery(query, "WQL", &h30)
这工作正常,但它只检索一些 Hyper-V 日志而不是全部。一些谷歌搜索表明没有办法解决这个问题,并且 MS 还没有建立将所有 Hyper-V 日志读入 WMI 的能力。所以我需要一种不同的方法。
更多谷歌搜索发现了一些用于读取事件日志的 C# 代码,这会很好,因为我很高兴使用 C# 而不是 VBScript。问题是,虽然我可以阅读标准日志,如 System 和 Application,但我不知道如何阅读我想要的 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# 程序中使用什么来获取 Hyper-V VMMS 管理日志中的条目。
我正在测试的服务器是 2012R2,但我认为问题与 Windows 的确切版本无关。还有其他获取日志数据的方法,例如 Get-WinEvent 或 wevtutil,但我更愿意让 C# 程序工作,并且使用替代方法是最后的手段。
【问题讨论】: