Microsoft Security Essentials のスキャン履歴を取得する

概要

  • Microsoft Security Essentials のスキャン履歴は、イベントログに保存されている
  • PowerShell なら Get-EventLog コマンドレットでイベントログを検索できる
  • PowerShell がなければ WMI で


Microsoft Security Essentials のスキャン履歴はどこにある?

MS 謹製のウイルス対策ソフト、Microsoft Security Essentials を使い始めて3カ月近くたった。幸いにも大したトラブルはなく、毎日スケジュールしてスキャンしてくれているようだ。

ところで、Microsoft Security Essentials では、他のウイルス対策ソフトとは異なり、スキャンした履歴を画面上で確認することができない。

Microsoft Security Essentials

ホームタブの一番下に「最後のスキャン」として表示されるのが唯一の情報だが、これは最後にスキャンした時間でしかない。

どうでもいいといえばどうでもいいのだけど、折角使っているものだから、履歴をみて動いているのを確かめたい。

スキャン履歴はイベントログに出力されている

幸い、スキャン履歴はイベントログに出力されているようだ。

ソースは「Microsoft Antimalware」で、スキャン開始はイベントID1000、スキャン完了はイベントID1001になります。

コントロールパネルから「イベントビューア」を起動させ、「システム」のログから、イベントソースが「Microsoft Antimalware」のものを探すと、確かに「Microsoft Antimalware scan has finished.」という記録が見つかった。

Microsoft Security Essentials のスキャン履歴

以下の項目からは、スキャン履歴をプログラムから参照することを想定し、最近勉強中の PowerShell その他の方法でイベントログからスキャン履歴を取り出す書き方を調べたもの。

PowerShell でスキャン履歴を取得

PS C:\Users\daisuke> Get-EventLog -logName System | Where-Object { $_.Source -eq "Microsoft Antimalware" -and $_.EventId -eq 1001 } | Select-Object -first 10

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
...25 4 14 02:19    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...74 4 11 02:05    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...94 4 10 08:59    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...06 4 09 02:24    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...57 4 08 02:24    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...38 4 07 22:14    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...30 4 06 02:24    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...11 4 05 19:45    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...87 3 31 02:48    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....
...17 3 19 02:05    Info Microsoft Antimal...     1001 %Microsoft Antimalware scan has finished....

おお。簡単に取り出せた。Get-EventLog コマンドレットは便利だね。

Get-EventLog コマンドレットのほかには、最新の10件のみ取り出すために、Select-Object コマンドレットを使っている。UNIX コマンドの head とか tail のような使いどころになりそうだ。

ていうか、履歴をよく見ると、3/20?30の間とか、4/1?4の間とか、スキャンしていない日がぽろぽろあるみたいなんですけど。スキャンの予約時刻は午前2時にしてるのだけど、何かスキャンできない条件があるのかな。

とりあえずその件は保留。

WSH でスキャン履歴を取得

Windows Script Host でイベントログは結構面倒だった気がする。そうそう、WMI。なにそれ?

var wmi = GetObject("winmgmts:\\\\.");
var objset = wmi.ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE LogFile='System' and SourceName='Microsoft Antimalware' and EventCode='1001' and TimeGenerated>='20100315000000.0+540'");

for(var enm = new Enumerator(objset);!enm.atEnd();enm.moveNext()) {
	WScript.StdOut.Write(enm.item().TimeGenerated + "\t");
	WScript.StdOut.Write(enm.item().SourceName + "\t");
	WScript.StdOut.Write(enm.item().EventCode + "\n");
}

いまだに WMI のことがよくわかっていないので、見よう見まねで上記のコードを作った。

コマンドプロンプトから実行すると、下記のような結果を得ることができる。

C:\Users\daisuke\lang\wsh>cscript EventLog.js
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

20100413171946.000000-000       Microsoft Antimalware   1001
20100410170517.000000-000       Microsoft Antimalware   1001
20100409235937.000000-000       Microsoft Antimalware   1001
20100408172408.000000-000       Microsoft Antimalware   1001
20100407172440.000000-000       Microsoft Antimalware   1001
20100407131401.000000-000       Microsoft Antimalware   1001
20100405172408.000000-000       Microsoft Antimalware   1001
20100405104545.000000-000       Microsoft Antimalware   1001
20100330174831.000000-000       Microsoft Antimalware   1001
20100318170556.000000-000       Microsoft Antimalware   1001
20100318154900.000000-000       Microsoft Antimalware   1001
20100317121309.000000-000       Microsoft Antimalware   1001
20100315105113.000000-000       Microsoft Antimalware   1001

TimeGenerated の時刻は UTC が基準なので、検索するときや、出力した値を使うときは、必要に応じて時差を加減する必要があるようだ。

ちなみに、Windows XP Professional や Windows Server 2003 であれば、System32 フォルダ以下に「eventquery.vbs」なる VBScript があり、これを使うことでイベントログを簡単に取得できるらしい

wmic コマンドでスキャン履歴を取得

WMI のコマンドラインインターフェイス「wmic」を使って、WSH でやったことと実質的に同じことができる。

C:\Users\daisuke>wmic NTEVENT where "(LogFile='System' and SourceName='Microsoft
 Antimalware' and EventCode='1001' and TimeGenerated>='20100315000000.0+540')" g
et EventCode, SourceName, TimeGenerated
EventCode  SourceName             TimeGenerated
1001       Microsoft Antimalware  20100413171946.000000-000
1001       Microsoft Antimalware  20100410170517.000000-000
1001       Microsoft Antimalware  20100409235937.000000-000
1001       Microsoft Antimalware  20100408172408.000000-000
1001       Microsoft Antimalware  20100407172440.000000-000
1001       Microsoft Antimalware  20100407131401.000000-000
1001       Microsoft Antimalware  20100405172408.000000-000
1001       Microsoft Antimalware  20100405104545.000000-000
1001       Microsoft Antimalware  20100330174831.000000-000
1001       Microsoft Antimalware  20100318170556.000000-000
1001       Microsoft Antimalware  20100318154900.000000-000
1001       Microsoft Antimalware  20100317121309.000000-000
1001       Microsoft Antimalware  20100315105113.000000-000

LogParser でスキャン履歴を取得

LogParser は、Microsoft が無償で提供しているツールで、IIS ログや、イベントログなど、さまざまな形式のログから、SQL を使ってレコードの抽出ができる。

単独のプログラムとしてコマンドラインで動かすほかにも、他のプログラムから COM の形で機能を利用することもできる。使い方が簡単なので、J-SOX まわりで必要となっているログ統制の目的を達するために活用されることもあるのだとか。

ダウンロードはここから。

そして実際使ってみると、

C:\Users\daisuke>logparser "SELECT TimeGenerated, SourceName, EventID FROM Syste
m where SourceName='Microsoft Antimalware' and EventID='1001' and TimeGenerated>
='2010-03-15 00:00:00' ORDER BY TimeGenerated DESC"
TimeGenerated       SourceName            EventID
------------------- --------------------- -------
2010-04-14 02:19:46 Microsoft Antimalware 1001
2010-04-11 02:05:17 Microsoft Antimalware 1001
2010-04-10 08:59:37 Microsoft Antimalware 1001
2010-04-09 02:24:08 Microsoft Antimalware 1001
2010-04-08 02:24:40 Microsoft Antimalware 1001
2010-04-07 22:14:01 Microsoft Antimalware 1001
2010-04-06 02:24:08 Microsoft Antimalware 1001
2010-04-05 19:45:45 Microsoft Antimalware 1001
2010-03-31 02:48:31 Microsoft Antimalware 1001
2010-03-19 02:05:56 Microsoft Antimalware 1001
何かキーを押してください...
TimeGenerated       SourceName            EventID
------------------- --------------------- -------
2010-03-19 00:49:00 Microsoft Antimalware 1001
2010-03-17 21:13:09 Microsoft Antimalware 1001
2010-03-15 19:51:13 Microsoft Antimalware 1001

統計情報:
---------
処理された要素: 41690
出力された要素: 13
実行時間:       1.51 秒

上記のような感じ。

コマンドの組み立て方は wmic と似ているけど、よりシンプルだ。しかもどういうカラクリか、WMI を使った時よりも出力が早い気がする。

参考文献

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>