Windowsバックアップの結果通知は、タスクスケジューラにて成功/失敗のイベントログをトリガーにしたタスクを作るよう説明しているサイトが多い。 が、自社の環境ではちょいちょい通知が来ないことがある。イベントログを確認してみると記録はされている。イベントログのトリガは不安定と感じている。

そこで、直接成功/失敗のイベントログを見に行って、その結果をもとに通知するほうが確実と判断。現在テスト中。 以下がとても参考になった。

https://stackoverflow.com/questions/51769582/powershell-script-not-pulling-event-from-event-log

実際には以下のようなコードで運用している

# 何時間前までのログを対象にするか
$PastHours=12
$StartAt = (Get-Date).AddHours(-$PastHours)
# バックアップ成功時に記録されるイベントログ
$FilterHashTable = @{
    logname   = "Microsoft-Windows-Backup"
    id        = 4
    StartTime = $StartAt
}

try{
  $actions = (Get-WinEvent -FilterHashtable $FilterHashTable -ErrorAction Stop)

  if ($actions){
    ForEach($action in $actions){
        Write-Host "OK: Windows Backup Completed Successfully at $(($action.Task)),$(($action.TimeCreated))"
        Exit 0
    }
  }else{
    Write-Host "CRITICAL: Windows Backup has not run in past $PastHours hours"
    exit 1
  }
}catch [Exception] {
    Write-Host "CRITICAL: Windows Backup has not run in past $PastHours hours"
    Exit 1
}