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

问题描述 投票:0回答:2

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

它确实在此事件查看器中写入“应用程序和服务日志/Microsoft/Windows/诊断-PLA/操作”

我正在尝试在 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'")

它正确返回计数。

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

vbscript wmi windows-server-2008-r2 performancecounter wmi-query
2个回答
2
投票

WMI 不支持 Windows 事件日志的事件跟踪。应用程序事件日志(您的查询正在为其工作)是不使用 Windows 事件技术的经典事件日志。 Win32_NtLogEvent 公开了经典事件日志中记录的事件,但它公开来自更新的事件日志(在 Vista 中引入)的事件。不过,您可以使用 PowerShell cmdlet Get-WinEvent 读取这些日志。


0
投票

jon Z 在他的回答中所写的是正确的。但是....

有一个解决方法......

在注册表中创建以下键:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Microsoft-Windows-Diagnostics-Performance/Operational

您不必在其下创建任何值,也无需重新启动。

之后,以下 WMI 查询将起作用:

Set colItems = objWMIService.ExecQuery("select * from Win32_NtLogEvent where Logfile = 'Microsoft-Windows-Diagnostics-Performance/Operational'")
© www.soinside.com 2019 - 2024. All rights reserved.