PowerShell でイベントログを Slack へ送信する(2)Slack APIでイベントログを送信する
アクセストークンを取得してテストもOKだったので、PowerShell により Slack API を呼んでイベントログを送信してみます。
使用するコマンドレットは?
PowerShell から REST Web API を呼び出すには以下を参考にし、
Invoke-RestMethod
コマンドレットを使用します。
テストの内容をそのまま PowerShell で実現してみる
テストは以下のURLでテストをしました。
https://slack.com/api/chat.postMessage?token=xoxp-xxx-xxx-xxx-xxx&channel=general&text=Hello%20World
これをInvoke-RestMethod
コマンドレットを使用して以下のように PowerShell で呼び出してみます。
Invoke-RestMethod -Uri "https://slack.com/api/chat.postMessage" -Method POST -Body @{ token="xoxp-xxx-xxx-xxx-xxx"; channel="general"; text="Hello World" }
実行しますと、以下のように返ってきて
以下のようにメッセージがポストされました。
イベントログを送信送信してみる
PowerShell から Slack API を使ってメッセージをポストすることができたので、イベントログを送信するスクリプトを作成します。
以前イベントログをメール送信する PowerShell スクリプトを作成しました。
これをメール送信ではなく、Slack へのメッセージ送信に置き換えます。
従って、タスクスケジューラーの設定等は上記のとおりそのままです。
#現在時刻取得$datetime = Get-Date#Slack へメッセージポストする設定値$token = "xoxp-xxx-xxx-xxx-xxx"
$username = "My App"
$channel = "general"
$icon_emoji = ":cold_sweat:"#イベントログを取得する$logmessage = Get-EventLog -LogName System -Before ($datetime) -Newest 1 -EntryType Error | Format-List | Out-String
$text = "イベントログ " + $datetime.ToString() + $logmessage#SlackへメッセージをポストInvoke-RestMethod -Uri "https://slack.com/api/chat.postMessage" -Method POST -Body @{
token = $token;
channel = $channel;
username = $username;
icon_emoji = $icon_emoji;
text = $text
}
以下のことをやっています。イベントログ取得については「PowerShell でイベントログをメール送信する」のままです。
- 時刻取得
- Slack へメッセージポストする設定値を変数に格納
今回はusername
に ”My App” 、icon_emoji
に 😰 を設定してみました。 - Get-EventLog コマンドレットでイベントログ取得。
オプションで各種フィルタを設定(このスクリプトを起動するタスクスケジューラに設定したフィルターと同じフィルターを設定。ここでは-LogName
と-EntryType
)、-Before ($datetime) -Newest 1
とオプションを設定することで、このスクリプトが起動した時刻以前の最新1件目のイベントを取得する。 Format-List コマンドレットにパイプで渡してフォーマット、Out-String コマンドレットにパイプで渡して String にする。 Invoke-RestMethod
で Slack API (chat.Message
)を呼び出して、イベントログの内容をメッセージとしてポスト。
このスクリプトを実行してみます。
無事送信できました。あとはこのスクリプトをタスクスケジューラーでタスクとして設定(「PowerShell でイベントログをメール送信する」参照) して完了です。