自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/ExcelVBA/JavaScript/Raspberry Piなどで色んなことを自動化

PowerShellの実行結果をMicrosoft Teamsでbotに自動投稿させるのは割と簡単

実行完了まで時間の掛かるPowerShellスクリプト例えば大量のファイルをコピーするものや何度も再起動しながら実行するようなPCのキッティングスクリプトなどでエラー発生および完了の通知をチャットで受け取りたいという場合。

Slackの着信Webhookインテグレーションなどに対して Invoke-RestMethod コマンドレットでチャットに投稿させるが、実はMicrosoft TeamsでもIncoming Webhookというコネクタがあり、同じことが簡単に出来るというお話。

設定手順

  1. Webhook用のチャネルを作成
  2. チャネルにコネクタ「Incoming Webhook」を追加
  3. botの名前とアイコンを設定してURLをコピー
  4. PowerShellからInvoke-RestMethod してみる

Teams側の前準備

検証用にチャネルを作成

既存のチャネルを利用する場合は新規作成しなくてもOKです。

f:id:maru0014:20200914212010p:plain

コネクタを追加

チャネル名右側の「・・・」から「コネクタ」を選択

f:id:maru0014:20200914212027p:plain

Incoming Webhookを追加

検索しなくても上の方にあるはず。もし出てこない場合はincomingと検索すれば出てきます。

f:id:maru0014:20200914212039p:plain

f:id:maru0014:20200914212049p:plain

botの名前とアイコンを設定

アイコンはデフォルトのままでもOKです。

複数のWebhookを構成する場合は見分けが付きやすくするために設定することをおすすめします。

f:id:maru0014:20200914212118p:plain

Webhook URLをメモしておく

作成が完了するとWebhook URLが表示されるのでコピーして完了。

f:id:maru0014:20200914212130p:plain

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

こんなかんじでチャットに投稿されれば成功。

f:id:maru0014:20200914212142p:plain

初期設定後の設定は「構成済み」メニューから

構成...新しいWebhookを作成

管理...既存のWebhookの設定を確認・変更

f:id:maru0014:20200914212152p:plain

参考

docs.microsoft.com

docs.microsoft.com