Windows のイベント ログに特定のエラー イベントが記録された時に、LINE WORKS の Bot API で通知します。
PowerShell スクリプト
以下の記事に記載した PowerShell のスクリプトを基に、Get-EventLog コマンドレットでイベントの内容を取得し、トークに含めるような変更を行いました。
TITLE: PowerShell から トーク Bot API で LINE WORKS にメッセージ送信
URL: https://qiita.com/iwaohig/items/92a3b5b4af288c22a96a
Windows のタスク スケジューラにイベントをトリガーに、スクリプト ファイルを実行するようタスクを作成します。
スクリプト例は以下のとおりです。
$header = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$header.Add("Content-Type","application/json; charset=UTF-8")
$header.Add("consumerKey","<Server API Consumer Key>")
$header.Add("Authorization","Bearer <Server Token>")
$header.Add("Cache-Control","no-cache")
$botno = "<Bot No.>"
$accountId = "<user id>"
$GetEventLog = Get-EventLog -LogName System -Newest 1 -EntryType Error
$EventLog = "エラーを検知しました \r\n\r\n[日時] \r\n" + [string]$GetEventLog.TimeGenerated + "\r\n\r\n[ソース] \r\n" + [string]$GetEventLog.Source + "\r\n\r\n[メッセージ] \r\n" + [string]$GetEventLog.Message
$request = @"
{
"botNo": $botno,
"accountId": "$($accountId)",
"content": {
"type": "text",
"text": "$($EventLog)"
}
}
"@
$Body = [System.Text.Encoding]::UTF8.GetBytes($request)
$Uri = "https://apis.worksmobile.com/<API ID>/message/sendMessage/v2"
Invoke-RestMethod -Uri $Uri -ContentType 'application/json' -Method Post -Header $header -Body $Body
単純にトークで通知を送るだけでなく、トリガーとなったイベントの概要を含めたメッセージを生成するために Get-EventLog コマンドレットを用います。
Get-EventLog の詳細はこちらの Microsoft のドキュメントを参照してください。
TITLE: Get-EventLog
URL: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1
上記のスクリプト例では、以下のようにシステムのイベント ログを取得しています。
適宜、取得対象のイベントに合わせて書き換えてください。
Get-EventLog -LogName System -Newest 1 -EntryType Error
さらにスクリプト例では、取得したイベントの詳細から生成日時、ソース、内容の項目をトーク メッセージに含める処理を行っています。こちらも、トーク メッセージに含めたい項目に合わせて書き換えてください。
タスクスケジューラ
Windows のタスクスケジューラを起動し、イベント ログの記録をトリガーに PowerShell スクリプトを実行するタスクを作成します。
カスタム イベント フィルターで任意のイベント記録をトリガーとするよう設定できます。
作成した PowerShell スクリプト ファイルが実行されるよう設定します。
動作確認
トリガーに指定したイベントの記録時に Bot から当該イベントの概要を含む通知メッセージが届きます。