Home >
Windows にまつわる e.t.c.
PowerShell で Slack にメッセージを送信する
自作スクリプトで、エラーとかのイベントログをメールで通知していたのですが、メールサーバーのダウン対策で Slack
にもメッセージ送信するようにしました
その際の設定についてまとめました
今回は、「message-test」チャンネルに PowerShell でメッセージを送信してみます

トークンの生成は Web UI で操作するので、まずは Web ブラウザで Slack にログインします
参考までに、Windows デスクトップアプリメインでを使用していて Web 版 Slack を使っていない方向けに Web
版 Slack の URL 取得方法です
URL は「右肩のハンバーガーメニュー > コピー > リンクをコピー」で URL
がコピーできますので、こちらから Web 版の Slack にアクセスしてください
(スマデ アプリからの URL は調べていません)

アプリケーションの作成
Web ブラウザで Slack にログインしたら、Slack API にアクセスし、Slack
にアプリケーションを作成します
Slack API: Applications
https://api.slack.com/apps
Create New App でアプリケーションを作成

From scratch を選択

アプリケーション名と、メッセージを送信するワークスペースを指定し Create App

トークンの生成
アプリケーションが作成出来たら、トークンの生成をします
OAuth & Permissions を開き...

スクロールダウンして Scopes セクションを開き Bot Token Scopes の Add an
OAuth Scope

chat:write の権限を付与

スクロールアップして、先頭にある Advanced token security via token
rotation でワークスペースにインストールします

許可するとトークンが生成されます

生成されたトークンを Copy

アプリケーションをチャンネルに登録
作成されたアプリケーションをチャンネルに登録して、メッセージを送信を許可します
アプリを右クリックしてアプリの詳細を表示する

チャンネルにこのアプリを追加する

チャンネルを選択し追加

チャンネルにアプリが追加された

■ PowerShell でメッセージを送信する
PowerShell でメッセージ送信するには以下のようにします
# リクエストボディの作成
$body = @{
token = 'Youre token'
channel = '#message-test'
text = 'Hello world !!'
}
# メッセージ送信
Invoke-RestMethod -Method Post -Uri 'https://slack.com/api/chat.postMessage' -Body $body
|

メッセージが送信できました

関数にする
関数にすると、こんな感じになります
トークンファイル「TokenFile.txt」をスクリプトディレクトに作成し、1行目にトークン、2行目にチャンネルを書いてください
必要であれば、エラー処理とかチューニングすると良いと思います
####################################
# Slack にメッセージを送る
####################################
function SendSlackMessage([string]$Message){
# トークンファイル
$TokenFileName = "TokenFile.txt"
# API URI
$ApiUri = "https://slack.com/api/chat.postMessage"
# トークンファイルの取得
$TokenFileFullPath = Join-Path $PSScriptRoot $TokenFileName
if( -not (Test-Path $TokenFileFullPath)){
return
}
# トークンファイルの読み込み
try{
[array]$TokenData = Get-Content -Path $TokenFileFullPath
}
catch{
return
}
# トークンとチャンネルの取得
$Token = $TokenData[0]
$Channel = $TokenData[1]
if(( $Token -eq $null ) -or ( $Channel -eq $null )){
Write-Output "[ERROR] !!!!!!!! $TokenFileFullPath format error. !!!!!!!!"
return
}
# リクエストボディの作成
$body = @{
token = $Token
channel = $Channel
text = $Message
}
# メッセージ送信
Invoke-RestMethod -Method Post -Uri $ApiUri -Body $body
}
|
大きなメッセージをスレッドに格納する
(2025年9月16日 Update)
イベントログを Slack 通知するようにしたのですが、イベントログの XML
もメッセージに出力するようにしていたので、メッセージサイズが大きくなり、複数のエラーが起き時(通常この状態)に、エラーの見通しが悪くなるので、メールみたいに
Subject と body みたいな表示ができないかと模索してみました
当初折りたたみ表示ができるのではないかと思ったのですが、実現する方法が見つからず...
こんな時はと ChatGPT さんに相談したら、メッセージ本体をスレッドに入れるアイディアをもらいました
実装すると、こんな感じのメッセージになったので、目的達成できたようです

という事で、こんな感じに関数をアップデート
($Message を省略すると、普通にメッセージ送れます)
####################################
# Slack メッセージを送る
####################################
function SendSlackMessage([string]$Summary, [string]$Message){
# トークンファイル
$TokenFileName = "TokenFile.txt"
# API URI
$ApiUri = "https://slack.com/api/chat.postMessage"
# トークンファイルの取得
$TokenFileFullPath = Join-Path $PSScriptRoot $TokenFileName
if( -not (Test-Path $TokenFileFullPath)){
return
}
# トークンファイルの読み込み
try{
[array]$TokenData = Get-Content -Path $TokenFileFullPath
}
catch{
return
}
# トークンとチャンネルの取得
$Token = $TokenData[0]
$Channel = $TokenData[1]
if(( $Token -eq $null ) -or ( $Channel -eq $null )){
Write-Output "[ERROR] !!!!!!!! $TokenFileFullPath format error. !!!!!!!!"
return
}
# リクエストボディの作成
$body = @{
token = $Token
channel = $Channel
text = $Summary
}
# メッセージ送信
$Response = Invoke-RestMethod -Method Post -Uri $ApiUri -Body $body
if($Response.ok -ne $true){
Write-Output "[ERROR] !!!!!!!! Slack API error. (body) !!!!!!!!"
return
}
if($Message -ne [string]$null){
# スレッド用リクエストボディの作成
$ThreadTs = $Response.ts
$body = @{
token = $Token
channel = $Channel
thread_ts = $ThreadTs
text = $Message
}
# スレッドメッセージ送信
$Response = Invoke-RestMethod -Method Post -Uri $ApiUri -Body $body
if($Response.ok -ne $true){
Write-Output "[ERROR] !!!!!!!! Slack API error. (thread) !!!!!!!!"
return
}
}
}
|


Copyright © MURA
All rights reserved.