1

我是 Python 新手(和一般的编码),我正在通过 WMI 模块工作。我正在寻找的是一种查询 WMI 以查找过滤日期的事件日志错误的方法。

例如,如果我执行以下操作,它会起作用:

events = userwmi.query("Select * from Win32_NTLogEvent where Type='error' AND TimeWritten='20120806000000.000000-000'")

如果我这样做:

q_text = "Select * from Win32_NTLogEvent where Type='error' AND TimeWritten='20120806000000.000000-000'"
events = userwmi.query(q_text)

它失败并出现以下错误:

Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    events = user.query(q_text)
  File "C:\Python27\lib\site-packages\wmi.py", line 1009, in query
    return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ]
  File "C:\Python27\lib\site-packages\win32com\client\util.py", line 84, in next
    return _get_good_object_(self._iter_.next(), resultCLSID = self.resultCLSID)
com_error: (-2147217385, 'OLE error 0x80041017', None, None)

查询在语法上无效。我猜那是因为 query() 不是按原样传递文本,而是传递了一个表示文本的对象?我还尝试了 userwmi.query(wql=q_text) 来明确指定正在使用的关键字参数。

我的目标是使用 datetime 模块在运行时获取当前日期,然后在一个月前构造一个日期字符串(必要时考虑前导零和年份更改),然后构造一个采用新日期的 WQL 语句。现在我可以根据上面的格式构造日期,将它与查询语句的其余部分结合起来并打印完整的语句。我可以手动复制该语句并将其粘贴到 query() 方法中并成功运行。

我在这里有希望吗?

4

1 回答 1

0

我将在这里回答我自己的问题:字符串编码。通过构建字符串然后将其编码为 utf-8 一切正常。

于 2012-08-12T02:10:59.137 回答