Powershell:サーバーシャットダウン/起動時にSlackへ通知を送る

公開:2021/01/12
更新:2021/01/12
2 min読了の目安(約2400字TECH技術記事

背景

Windowsサーバーを再起動したらSlack通知を出したい人生だった

事前準備

Slack:IncomingWebHookを追加

  1. [設定と管理]→[アプリを管理する]の順にクリック

  2. [Incoming WebHook]を検索

  3. [Incoming WebHook]をクリック

  4. [Slackに追加]をクリック

  5. 追加するチャンネルを選択→追加

  6. Webhook URLをコピーしておく

ここまででSlackの準備は完了

PowerShell実行ポリシーを確認する

参考:PowerShell のスクリプトが実行できない場合の対処方法

Get-ExecutionPolicy

結果がRestricted だったら、↓を実行して実行ポリシーを変更する

Set-ExecutionPolicy RemoteSigned

注意点

PowerShellの実行ポリシーを変更すると、ややセキュリティレベルが下がります。
もっと厳密にやりたい場合、PowerShellを実行するときだけRemoteSignedに変更するバッチファイルを作成するとかで対処したら良いかと思います。

psファイルを作成する

  1. 適当なテキストエディタに後述のコードを貼り付け
  2. Incoming WebHookのURLを先程取得したものに変更する。
  3. 拡張子ps1にしてファイル保存
$argument = [System.Text.Encoding]::GetEncoding('ISO-8859-1')
$encode2utf = [System.Text.Encoding]::UTF8.GetBytes($args)

$notificationPayload = @{ 
    text = $argument.GetString($encode2utf);
    username = "Uma"; 
    icon_url = ""
}

Invoke-RestMethod -Uri "https://hooks.slack.com/services/xxxxxxx/xxxxxxx/xxxxxxx" -Method Post -Body (ConvertTo-Json $notificationPayload)

設定方法

グループポリシーエディタを開く

コンピュータの構成 → Windows の設定 → スクリプト(スタートアップ/シャットダウン)→スタートアップorシャットダウンをダブルクリック

[PowerShell スクリプト]をクリック
※スタートアップ/シャットダウンで追加操作は変わらない。

[追加]をクリック→作成したps1ファイルを追加

パラメーターに投稿文を記載する

確認

シャットダウン/起動するとSlackに通知が来るようになった。

応用例

  • PC名、ログオンユーザーを取得してSlack通知に載せる
  • シャットダウン→起動のリードタイムにしきい値を設定し、一定以上起動してこなかったら通知を出す
  • などなど

いじょー

何か良い応用案あったらシェアしてほしいっす