我试图查询Win32_NTLogEvent,查看上次运行查询时的条目。我尝试过使用字符串变量,以便每次运行脚本时都可以更改它。但是我为生成的集合返回了null。我已经查看了WMI DateTimes的相关信息并在比较中使用它们。虽然我发现了一些看似相互矛盾的信息(即一些使用人类可读的来源直接与UTC比较而其他信息不是)。我尝试过一个UTC字符串和一个人类可读的字符串。但似乎都不起作用。我之所以认为这是因为我需要将日期时间与日期时间进行比较,而不是将字符串与字符串进行比较。虽然很多消息来源似乎都说字符串的字符串在这种情况下会起作用。但是,即使我是对的,我也不确定如何在查询内部转换Win32_NTLogEvent中每个对象的时间。
这是我脚本的相关部分。注释掉的UTC就在那里,因为如果我必须回到UTC,我不想重新输入日期:
strTimeMin = "01/01/1970/0:00:00"
'19700101000000.000000-480
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
'Querying Event Logs
Set colLoggedEvents = objWMIService.ExecQuery _
("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'system' AND "_
& "Type = 'Error' AND TimeGenerated > " & strTimeMin & "")
感谢您的帮助!
答案 0 :(得分:2)
UTC字符串应该可以正常工作。但是,由于它们是字符串,因此需要将它们放在WMI查询中的单引号之间:
computer = "..."
minTime = "20140801000000.000000-000"
Set wmi = GetObject("winmgmts:\\" & computer & "\root\cimv2")
qry = "SELECT * FROM Win32_NTLogEvent " & _
"WHERE LogFile = 'System' AND Type = 'Error' " & _
"AND TimeGenerated > '" & minTime & "'"
For Each evt In wmi.ExecQuery(qry)
...
Next