概要
- Microsoft Security Essentials のスキャン履歴は、イベントログに保存されている
- PowerShell なら Get-EventLog コマンドレットでイベントログを検索できる
- PowerShell がなければ WMI で
Microsoft Security Essentials のスキャン履歴はどこにある?
MS 謹製のウイルス対策ソフト、Microsoft Security Essentials を使い始めて3カ月近くたった。幸いにも大したトラブルはなく、毎日スケジュールしてスキャンしてくれているようだ。
ところで、Microsoft Security Essentials では、他のウイルス対策ソフトとは異なり、スキャンした履歴を画面上で確認することができない。
ホームタブの一番下に「最後のスキャン」として表示されるのが唯一の情報だが、これは最後にスキャンした時間でしかない。
どうでもいいといえばどうでもいいのだけど、折角使っているものだから、履歴をみて動いているのを確かめたい。
スキャン履歴はイベントログに出力されている
幸い、スキャン履歴はイベントログに出力されているようだ。
ソースは「Microsoft Antimalware」で、スキャン開始はイベントID1000、スキャン完了はイベントID1001になります。
コントロールパネルから「イベントビューア」を起動させ、「システム」のログから、イベントソースが「Microsoft Antimalware」のものを探すと、確かに「Microsoft Antimalware scan has finished.」という記録が見つかった。
以下の項目からは、スキャン履歴をプログラムから参照することを想定し、最近勉強中の 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 を使った時よりも出力が早い気がする。
参考文献
- スキャンの開始時間と経過時間を残す方法は? <http://social.answers.microsoft.com/Forums/ja-JP/msescanja/thread/3feae377-a8b3-47bf-902a-670b9d7f57bf>
- @IT:Windows TIPS — Knowledge:コマンド・プロンプトでイベント・ログを表示する <http://www.atmarkit.co.jp/fwin2k/win2ktips/333eventquery/eventquery.html>
- Professor Windows ‐ 2005 年 5 月 ‐ Log Parser 2.2 の動作方法 <http://technet.microsoft.com/ja-jp/library/bb878032.aspx>