Vbscript WMI查询-2008性能计数器警报

Vbscript WMI查询-2008性能计数器警报,vbscript,wmi,windows-server-2008-r2,performancecounter,wmi-query,Vbscript,Wmi,Windows Server 2008 R2,Performancecounter,Wmi Query,我在windows 2008 server上有一组性能计数器警报,我将其配置为在触发警报后写入事件查看器 它会在事件查看器中写入“应用程序和服务日志/Microsoft/Windows/Diagnosis PLA/Operational” 我正试图在vbscript文件中针对此事件查看器编写WMI查询,以读取其中的事件 我的问题是: Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=imperso

我在windows 2008 server上有一组性能计数器警报,我将其配置为在触发警报后写入事件查看器

它会在事件查看器中写入“应用程序和服务日志/Microsoft/Windows/Diagnosis PLA/Operational”

我正试图在vbscript文件中针对此事件查看器编写WMI查询,以读取其中的事件

我的问题是:

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("select * from Win32_NtLogEvent where Logfile = 'Microsoft-Windows-Bits-Client%4Operational'")
问题是:当我检查colItems.count时,它返回零,但是我知道那里有事件,当我导航到事件查看器时可以看到它们

如果我查询“应用程序”事件查看器,同样的查询也可以正常工作:

Set colItems = objWMIService.ExecQuery("select * from Win32_NtLogEvent where Logfile = 'Application'")
它正确返回计数


知道第一个查询中的问题是什么吗?

WMI不支持Windows事件日志的事件跟踪。应用程序事件日志(您的查询正在处理该日志)是一个经典的事件日志,不使用Windows事件处理技术。Win32\u NtLogEvent公开经典事件日志中记录的事件,但它不公开最近事件日志(在Vista中引入)中的事件。但是,您可以使用PowerShell cmdlet获取WinEvent读取这些日志

所有日志都保存在这里C:\Windows\System32\winevt\logs,我可以看到Application.evtx日志文件以及Microsoft Windows Diagnostics PLA%4Operational.evtx日志文件。我仍然不明白为什么查询应用程序日志会返回结果,而另一个不会。我不确定是不是因为文件名中的“%4”编码字符!我不是在寻找针对事件的跟踪机制。我只想针对这个日志编写一个简单的查询。它可以根据应用程序事件日志正常工作。