🐴
Powershell:サーバーシャットダウン/起動時にSlackへ通知を送る
背景
Windowsサーバーを再起動したらSlack通知を出したい人生だった
事前準備
Slack:IncomingWebHookを追加
-
[設定と管理]→[アプリを管理する]の順にクリック
-
[Incoming WebHook]を検索
-
[Incoming WebHook]をクリック
-
[Slackに追加]をクリック
-
追加するチャンネルを選択→追加
-
Webhook URLをコピーしておく
ここまででSlackの準備は完了
PowerShell実行ポリシーを確認する
参考:PowerShell のスクリプトが実行できない場合の対処方法
Get-ExecutionPolicy
結果がRestricted だったら、↓を実行して実行ポリシーを変更する
Set-ExecutionPolicy RemoteSigned
注意点
PowerShellの実行ポリシーを変更すると、ややセキュリティレベルが下がります。
もっと厳密にやりたい場合、PowerShellを実行するときだけRemoteSignedに変更するバッチファイルを作成するとかで対処したら良いかと思います。
psファイルを作成する
- 適当なテキストエディタに後述のコードを貼り付け
- Incoming WebHookのURLを先程取得したものに変更する。
- 拡張子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通知に載せる
- シャットダウン→起動のリードタイムにしきい値を設定し、一定以上起動してこなかったら通知を出す
- などなど
いじょー
何か良い応用案あったらシェアしてほしいっす
Discussion