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 モジュールを使用して実行時に現在の日付を取得し、1 か月前の日付文字列を作成し (必要に応じて先頭のゼロと年の変更を考慮して)、新しい日付を取得する WQL ステートメントを作成することです。現時点では、上記の形式に従って日付を作成し、それをクエリ ステートメントの残りの部分と組み合わせて、完全なステートメントを出力できます。そのステートメントを手動でコピーして query() メソッドに貼り付け、正常に実行できます。

ここで私に希望はありますか?

4

1 に答える 1

0

ここで私自身の質問に答えます: 文字列のエンコーディング。文字列を作成し、それを utf-8 としてエンコードすることで、すべてが機能します。

于 2012-08-12T02:10:59.137 に答える