課題
PowerShellからSlackにpostする場合に日本語が文字化けして、正しく改行ができない場合の対策です。
Slackにコードを含む内容を投稿する場合に利用します。
現象
PowerShellからSlackにpostすると次の2つの問題があります。
- 日本語文字が「?」になします。
- 改行コードに「\n」を入れても「\」が自動でエスケープされて「\n」がslackに送られるためにslackでは「\n」と表示されます。
対策
- GetEncoding('ISO-8859-1')を使い文字エンコーディングを使います
- 「\n」の代わりに次のように改行コード0x0Aを直接送ります。(0x0A -as [char])
サンプルコード
次はPowerShellからSlackにコードを含むメッセージをpostするスクリプトの例です。slack本文にはtitleとmessageが表示されます。
$uriSlack = 'https://hooks.slack.com/services/<webhook url>'
function Post_To_Slack([String]$title="test", [String]$message="test message") {
$encode = [System.Text.Encoding]::GetEncoding('ISO-8859-1') # UTF-8
$utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($title)
$body = ConvertTo-Json @{
pretext = $title
text = $encode.GetString($utf8Bytes) + (0x0A -as [char]) + $message # titleとmessageの間に改行する。改行は(0x0A -a [char])で行う
}
try {
Invoke-RestMethod -uri $uriSlack -Method Post -body $body -ContentType 'application/json' | Out-Null
} catch {
Write-Error (Get-Date) ": Error posting to Slack."
}
}
$title = "Windowsアップデートされていないインスタンス一覧"
$message = '```' + $rec_list.Trim() + '```'
Post_To_Slack $title $message
参考したリンク
PowerShell から Slack へメッセージを投稿する方法
以上