Comparing WMI DateTime to String in Query
我正在尝试查询Win32_NTLogEvent,以获取我上次运行查询后的条目。我尝试使用字符串变量,以便每次运行脚本时都可以更改它。但是我得到的生成的集合返回空值。我查找了有关WMI DateTimes的资料,并在比较中使用了它们。尽管我发现了一些看似相互矛盾的信息(即某些使用人类可读性直接与UTC进行比较的资源,而另一些则没有。)我已经尝试过UTC字符串和人类可读的字符串。但似乎都行不通。我在想这是因为我需要将日期时间与日期时间进行比较,而不是将字符串与字符串进行比较。尽管许多消息来源似乎都说在这种情况下可以将字符串转换为字符串。但是,即使我是对的,我也不知道如何在查询内转换Win32_NTLogEvent中每个对象的时间。
这是我脚本的相关部分。被注释掉的UTC就在那里,因为如果我必须返回UTC,我不想重新输入日期:
1 2 3 4 5 6 7 8 9 10 11 | strTimeMin ="01/01/1970/0:00:00" '19700101000000.000000-480 Set objWMIService = GetObject("winmgmts:" _ &"{impersonationLevel=impersonate}!\" & strComputer &"\ oot\\cimv2") 'Querying Event Logs Set colLoggedEvents = objWMIService.ExecQuery _ ("SELECT * FROM Win32_NTLogEvent WHERE Logfile = 'system' AND"_ &"Type = 'Error' AND TimeGenerated >" & strTimeMin &"") |
感谢您的帮助!
UTC字符串应该可以正常工作。但是,由于它们是字符串,因此需要在WMI查询中将它们放在单引号之间:
1 2 3 4 5 6 7 8 9 10 11 | computer ="..." minTime ="20140801000000.000000-000" Set wmi = GetObject("winmgmts:\" & computer &"\ oot\\cimv2") qry ="SELECT * FROM Win32_NTLogEvent" & _ "WHERE LogFile = 'System' AND Type = 'Error'" & _ "AND TimeGenerated > '" & minTime &"'" For Each evt In wmi.ExecQuery(qry) ... Next |