Edited at

PowerShellからSlackに通知する方法

More than 3 years have passed since last update.

(16/07/29追記)

当記事のスクリプトでは「煩」など一部の文字が「BAD+7…BAD+A9」のように化けて投稿されるので、当記事にリンクして頂いているこちらの記事のスクリプトの利用をお勧めします。

ログオン・ログオフ時にPowerShellを起動しSlackへ通知する【Windows7】


追加のソフトインストール無しでWindowsからSlackに通知が送れます。

要になるPowerShellのInvoke-RestMethodはWindows8、Windows Server 2012以降(PowerShell 3.0以降)で利用できます。


SlackのWebhook設定

Slackで投稿したいチャンネルのIncoming WebHooksを設定しておきます。

チャンネルのメニューから、Add a service integration > Incoming WebHooks を追加し、表示されたWebhook URLをメモしておきます。


PowerShellの実行許可

標準ではPowerShellスクリプトの実行が禁止されているので

管理者権限でPowerShellを起動してローカルのスクリプトを実行可能に設定します。


powershell

# 現在の設定を確認

PS > powershell Get-ExecutionPolicy
Restricted

# 設定を変更
PS > powershell Set-ExecutionPolicy RemoteSigned

# 設定を確認
PS > powershell Get-ExecutionPolicy
RemoteSigned



通知用PowerShellスクリプト

引数に渡された文字列をSlackに通知するスクリプトを用意します。UTF8に変換するので日本語もOKです。

$notificationPayloadのusernameとicon_urlは好みで設定してください。

Invoke-RestMethod -Uri にSlackで取得したWebhook URLを設定します。


notify_to_slack.ps1

$enc = [System.Text.Encoding]::GetEncoding('ISO-8859-1')

$utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($args)

$notificationPayload = @{
text = $enc.GetString($utf8Bytes);
username = "PowerShell BOT";
icon_url = "https://dl.dropboxusercontent.com/u/1518975/metro-powershell-logo.png"
}

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



バッチファイルからPowerShellスクリプトを呼び出す

バッチファイルからPowerShellスクリプトを呼び出します。


notify.bat

powershell /c notify_to_slack.ps1 "Hello Slack! こんにちは!"



参考サイト