Windows
PowerShell

Windowsの再起動が正しく行われたかをイベントログからPowerShellで確認する

More than 1 year has passed since last update.

背景

業務で、Windowsをタスクスケジューラなどで、定期再起動している場合、その時間帯は、監視対象外にしていると思います。その場合、再起動がうまくいったかって、わからないと思います。
起動してこなければ、監視再開後に、死活監視でわかると思いますが、再起動の停止に失敗した場合(起動したまままの場合)は、監視ではわからないですよね。

そこで、監視再開後の時間に、再起動が実施されたかをイベントログから確認する為のPowerShellを作成しました。

再起動イベントログ確認のPowerShell

再起動イベントログ確認のPowerShellです

TeikiRebootCheck.ps1
$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