実行完了まで時間の掛かるPowerShellスクリプト例えば大量のファイルをコピーするものや何度も再起動しながら実行するようなPCのキッティングスクリプトなどでエラー発生および完了の通知をチャットで受け取りたいという場合。
Slackの着信Webhookインテグレーションなどに対して Invoke-RestMethod
コマンドレットでチャットに投稿させるが、実はMicrosoft TeamsでもIncoming Webhookというコネクタがあり、同じことが簡単に出来るというお話。
設定手順
- Webhook用のチャネルを作成
- チャネルにコネクタ「Incoming Webhook」を追加
- botの名前とアイコンを設定してURLをコピー
- PowerShellから
Invoke-RestMethod
してみる
Teams側の前準備
検証用にチャネルを作成
既存のチャネルを利用する場合は新規作成しなくてもOKです。
コネクタを追加
チャネル名右側の「・・・」から「コネクタ」を選択
Incoming Webhookを追加
検索しなくても上の方にあるはず。もし出てこない場合はincomingと検索すれば出てきます。
botの名前とアイコンを設定
アイコンはデフォルトのままでもOKです。
複数のWebhookを構成する場合は見分けが付きやすくするために設定することをおすすめします。
Webhook URLをメモしておく
作成が完了するとWebhook URLが表示されるのでコピーして完了。
PowerShellからのリクエスト方法
PowerShellでWebhookを叩く場合はInvoke-RestMethod
を使う。
以下の $url
変数に先程メモしたURLを設定して実行してみましょう。
$url = 'https://outlook.office.com/webhook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx@xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/IncomingWebhook/xxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx' $msg = 'PowerShellとTeamsでチャットボット' $body = ConvertTo-JSON @{text = $msg } $postBody = [Text.Encoding]::UTF8.GetBytes($body) Invoke-RestMethod -Uri $url -Method Post -ContentType 'application/json' -Body $postBody
こんなかんじでチャットに投稿されれば成功。
初期設定後の設定は「構成済み」メニューから
構成...新しいWebhookを作成
管理...既存のWebhookの設定を確認・変更