トップ回答者
イベントID:6008(予期せぬシャットダウン)発生時にメール通知させる方法

質問
-
いつもお世話になっております。
Windows Server 2008 SP2で、システムエラーログのイベントID:6008
(予期せぬシャットダウン)発生時に電子メールの送信をさせたく、
以下の内容を参考にタスクを作成しましたが、電子メールの送信が行われません。http://www.atmarkit.co.jp/fwin2k/win2ktips/1183taskevt/taskevt.html
テスト用にシステムエラーログのイベントID:999が発生したときに
電子メールの送信をさせるタスクを作成。eventcreateコマンドでイベントID:999を作成し、
タスクによる電子メールの送信は確認出来ております。予期せぬシャットダウンの発生時は、PC起動後の最初にイベントID:6008のエラーログが残り、
その後にWindows EventlogサービスやTask Schedulerサービスが実行状態に移行しておりました。このため、イベントID:6008発生時はTask Schedulerサービスが実行されていないために
電子メールの送信がされないと考えております。http://technet.microsoft.com/ja-jp/library/cc721846.aspx
予期せぬシャットダウンの発生時にサーバ管理者にメール送信をするにはどうしたらいいのでしょうか?
よろしくお願い致します。2010年9月8日 6:14
回答
-
発生タイミングは無理でも、再起動するタイミング(トリガをスタートアップ時にする)で過去一時間くらいのイベントを検索して、イベントID:999があればメールを送信するようなタスクを作ったらどうでしょうか?
PowerShellだとこんな感じでしょうか。
$now = [datetime]::Now #一時間前のイベントから $after = $now.addhours(-1) get-eventlog -logname system -after $start -InstanceID 999 | export-csv event.csv
これでevent.csvというファイルができるので(場所はどこか適当な場所に変更してください)、それをメールで送ればいいんじゃないでしょうか。
Thanks, K.Kamegawa (http://d.hatena.ne.jp/kkamegawa/)- 回答としてマーク 三沢健二 2010年9月24日 6:24
2010年9月12日 8:47
すべての返信
-
発生タイミングは無理でも、再起動するタイミング(トリガをスタートアップ時にする)で過去一時間くらいのイベントを検索して、イベントID:999があればメールを送信するようなタスクを作ったらどうでしょうか?
PowerShellだとこんな感じでしょうか。
$now = [datetime]::Now #一時間前のイベントから $after = $now.addhours(-1) get-eventlog -logname system -after $start -InstanceID 999 | export-csv event.csv
これでevent.csvというファイルができるので(場所はどこか適当な場所に変更してください)、それをメールで送ればいいんじゃないでしょうか。
Thanks, K.Kamegawa (http://d.hatena.ne.jp/kkamegawa/)- 回答としてマーク 三沢健二 2010年9月24日 6:24
2010年9月12日 8:47 -
kkamegawa様
ご報告が遅くなりまして申し訳ございませんでした。
やりたかったことはkkamegawa様が仰った内容そのものズバリだったのですが、
生憎、私にPowerShellの知識が皆無だったため、検証に時間がかかってしまいました。
回答内容では何故かイベントログのエクスポートが出来なかったので
私なりに手を変え、品を変え、最終的には以下の手順でテスト環境での検証が済みました。
1.PowerShellの機能をインストールする。
参考情報:GUIユーザーのためのPowerShell入門
http://journal.mycom.co.jp/column/powershell/001/index.html
2.スクリプト・ファイルを実行するために、PowerShellにて以下のコマンドを実行し、
PowerShellのスクリプト実行ポリシーを変更する。
Set-ExecutionPolicy RemoteSigned
参考情報:PowerShellスクリプティングの第一歩
http://www.atmarkit.co.jp/fwin2k/operation/psh02/psh02_01.html
3.Windows Server 2008のCドライブ直下に「eventlog_sendmail」というフォルダを作成。
4.下記の参考情報を元に、PowerShellで以下の内容を記述したps1ファイルを作成。
$now = [datetime]::Now
$after = $now.addhours(-1)
get-eventlog system | Where-Object {$_.EventID -eq 6008 -and $_.EntryType -eq "Error" -and $_.TimeGenerated -gt $after} >c:\eventlog_sendmail\id6008.txt
$id6008flag = get-content c:\eventlog_sendmail\id6008.txt | select-string "6008" -quiet
if ($id6008flag) {$mail = New-Object System.Net.Mail.MailMessage("送信元メールアドレス","送信先"メールアドレス)
$mail.Subject = "イベントID:6008 予期せぬシャットダウン発生"
$mail.Body = @"
これはテストです。
"@
$mail.SubjectEncoding = [System.Text.Encoding]::GetEncoding("ISO-2022-JP")
$mail.BodyEncoding = [System.Text.Encoding]::GetEncoding("ISO-2022-JP")
$smtp = New-Object System.Net.Mail.SmtpClient("SMTPサーバーのFQDN(もしくはIPアドレス)")
$smtp.Send($mail) }
参考情報:Windows PowerShellコマンド&スクリプティング入門(後編)
http://www.atmarkit.co.jp/fwin2k/operation/psh02/psh02_05.html
5.タスク スケジューラでトリガを「システム起動時」に、操作を「プログラムの開始」にし、
プログラム/スクリプトでPowerShellの実体ファイルを指定。
引数の追加に、ps1ファイルのファイルパスを指定。
参考情報:イベント・ログをトリガーにしてメールを送信する(基本編)
http://www.atmarkit.co.jp/fwin2k/win2ktips/1183taskevt/taskevt.html
以上の手順をHyper-VのゲストOSのWindows Server 2008で操作。
Hyper-VマネージャでゲストOSのメニューバーから「操作」→「リセット」を実行し、
意図的に「イベントID:6008 予期せぬシャットダウン」を発生させ、動作検証。
無事、メールの送信がされました。
非常に助かりました。ありがとうございました。2010年9月24日 14:18