システムイベントログを取得、メール送信

# dumpel.exe を使う場合

* [Windows 2000 リソース キットのツールの管理タスク](https://support.microsoft.com/ja-jp/kb/927229)

```bash:出力
dumpel.exe -f system.csv -l system -c -d 1 -format dts
```

```bash:リダイレクトする場合
dumpel.exe -l system -c -d 1 -format dts > system.csv
```

* -f a.csv : 出力ファイル名
* -l : ログ種別
* -c : カンマ区切り
* -d : 何日前からのログを取得するか
    * windows7の場合、1を指定しても少し長い期間抽出される
* -format dts : 日付 時間 内容 で出力

----

# wmicを使う場合

* windows XP以降対応

## 参考

* [WMIC Best practices: Windows Management Instrumentation (WMI); Scripting](https://technet.microsoft.com/en-us/library/cc758713%28v=ws.10%29.aspx)
* [Tech TIPS：wmicコマンドでイベント・ログを表示する - ＠IT](http://www.atmarkit.co.jp/ait/articles/0804/25/news171.html)
* [Tech TIPS：Windowsのバッチファイル中で日付をファイル名に使用する (1/2) - ＠IT](http://www.atmarkit.co.jp/ait/articles/0405/01/news002.html)
* [コマンドの途中で改行する - Windows Tips: [コマンドプロンプト]](http://www.k-tanaka.net/windows/cmd/post_14.html)
* [前日のイベントログをWMIオブジェクトで取得する - Gブログ](http://d.hatena.ne.jp/bhunji2000/20091222/1261505346)

## バッチファイル

```bat:get_event_log.bat
@echo off

rem QUERY= の後ろに空白一つ入ります。
set QUERY= 
set QUERY=%QUERY% LogFile='System'
set QUERY=%QUERY% and Type!='Information'

rem 不要なソースを除外
set QUERY=%QUERY% and SourceName!='EventLog'
set QUERY=%QUERY% and SourceName!='Microsoft-Windows-GroupPolicy'
set QUERY=%QUERY% and SourceName!='Microsoft-Windows-Kernel-General'
set QUERY=%QUERY% and SourceName!='Microsoft-Windows-TerminalServices-RemoteConnectionManager'
set QUERY=%QUERY% and SourceName!='Microsoft-Windows-Time-Service'
set QUERY=%QUERY% and SourceName!='Schannel'
set QUERY=%QUERY% and SourceName!='Service Control Manager'
set QUERY=%QUERY% and SourceName!='TermDD'

rem 本日以降のログを取得
rem 2015/07/01を20150701で取得
set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
set QUERY=%QUERY% and TimeGenerated ^>= '%TODAY%000000.0+540'

rem 実行
wmic ntevent where^
 "(%QUERY%)"^
 GET Message,TimeGenerated,SourceName /FORMAT:htable > %TEMP%\eventlog.html
```

eventlog.htmlを確認。

## メール送信

* [[VB Script] CDO.Message でメールを送信すると「"SendUsing"の構成値は無効です。」エラーによりメールが送信できない](http://www.ipentec.com/document/document.aspx?page=vb-script-send-mail-cdo-message)
* [システム用のフォルダを取得する - GetSpecialFolder [Scripting.FileSystemObject] - VBScript Tips [VBA/Access/Excel対応]](http://www.happy2-island.com/vbs/cafe02/capter00222.shtml)

```vbnet:send_eventlog.vbs
Function getHostname()
  Dim objNetWork
  Dim PCname
  Set objNetWork = WScript.CreateObject("WScript.Network")
  PCname= objNetWork.ComputerName
  getHostname = PCname
End Function

' TEMPフォルダの取得
Dim objFileSys
Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objTempFile = objFileSys.GetSpecialFolder(2)

Set oMsg = CreateObject("CDO.Message")
oMsg.From = "eventlog@" & getHostname
oMsg.To = "to@localhost" '送信先
oMsg.Subject = "eventlog: " & getHostname
oMsg.TextBody = Now & vbCrLf & "イベントログ"
strAddAttachment = objTempFile & "\eventlog.html"
oMsg.AddAttachment strAddAttachment '添付ファイル

' SMTPサーバの設定
oMsg.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
oMsg.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "127.0.0.1"
oMsg.Configuration.Fields.Item _
 ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
oMsg.Configuration.Fields.Update

oMsg.Send
```

----

# タスク登録する場合の注意

* [スケジュール タスクは空のパスワードでは実行されない ](https://support.microsoft.com/ja-jp/kb/310715)
* スタートアップに登録するか、ローカルポリシーの変更で対応可能ではある。

----

# その他

```rb:年月日
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
```

```bash:足し算
set /A NEWYEAR=%YEAR% + 1
```