背景
業務で、Windowsをタスクスケジューラなどで、定期再起動している場合、その時間帯は、監視対象外にしていると思います。その場合、再起動がうまくいったかって、わからないと思います。
起動してこなければ、監視再開後に、死活監視でわかると思いますが、再起動の停止に失敗した場合(起動したまままの場合)は、監視ではわからないですよね。
そこで、監視再開後の時間に、再起動が実施されたかをイベントログから確認する為のPowerShellを作成しました。
再起動イベントログ確認のPowerShell
再起動イベントログ確認のPowerShellです
$SEARCHTIME = (Get-Date).AddMinutes(-30)
$RESULT = (Get-EventLog System -After $SEARCHTIME | Where-Object {$_.Source -match "EventLog" -and $_.EventID -match "6009"} | Measure-Object).Count
if ($RESULT -eq 1) {
Write-EventLog -LogName Application -Source TeikiReboot -EventID 100 -EntryType Information -Message "再起動に成功しました"
}else{
Write-EventLog -LogName Application -Source TeikiReboot -EventID 200 -EntryType Error -Message "再起動に失敗しました"
}
PowerShellの解説
$SEARCHTIME = (Get-Date).AddMinutes(-30)
1行目で、現在の時刻から30分前の時間を変数に代入します。
ちなみに、
60分前は、Get-Date).AddMinutes(-60)
3日前は、(Get-Date).AddDays(-3)
です。
$RESULT = (Get-EventLog System -After $SEARCHTIME | Where-Object {$_.Source -match "EventLog" -and $_.EventID -match "6009"} | Measure-Object).Count
2行目で、システムのイベトログから、ソースが「EventLog」、イベントIDが「6009」のイベントログの数をカウントしています。
今回は、1行目で30分前の時間を取得し検索対象としているので、30分以内に再起動のイベントログがあるかをカウントしています。
if ($RESULT -eq 1) {
Write-EventLog -LogName Application -Source TeikiReboot -EventID 100 -EntryType Information -Message "再起動に成功しました"
}else{
Write-EventLog -LogName Application -Source TeikiReboot -EventID 200 -EntryType Error -Message "再起動に失敗しました"
}
最後に、再起動のイベントの数が、1個ならば、再起動成功のイベントログを出力、1個以外なら、再起動失敗のイベントログを出力しています。
使い方(使いどこ)
Windowsの定期再起動後、監視対象外の時間が終わった後に、このPowerShellを実行するように、タスクスケジューラなどで設定し、このPowerShellで出力したイベントログを監視対象とする。とかですかね。
検索条件やif文のアクションの変更で、なにかに応用できるかとも思います。
実行する前に
今回は、最後のイベントログ出力のところで、ソースが「TeikiReboot」というログを出力していますが、このまま実行すると、そんなソース無いって怒られます。
ですので、あらかじめ以下を実行し、ソースを作成する必要がありますので、ご注意ください。
New-EventLog -LogName Application -Source TeikiReboot