【问题标题】:Comparing WMI DateTime to String in Query将 WMI 日期时间与查询中的字符串进行比较
【发布时间】:2014-08-07 16:00:36
【问题描述】:

我正在尝试查询 Win32_NTLogEvent 以获取上次运行查询之后的条目。我尝试使用字符串变量,以便每次运行脚本时都可以更改它。但是我为生成的集合返回了一个空值。我已经查找了有关 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 & "")

感谢您的帮助!

【问题讨论】:

    标签: vbscript wmi utc wql


    【解决方案1】:

    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
    

    【讨论】:

    • 好的。谢谢!我还是 WQL 的新手。所以我真的不知道该怎么做。
    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 2010-09-05
    • 2012-10-19
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多