LoginSignup
2
2

More than 1 year has passed since last update.

PowerShellからSlackにpostする場合の文字化けと改行問題の対策

Posted at

課題

PowerShellからSlackにpostする場合に日本語が文字化けして、正しく改行ができない場合の対策です。
Slackにコードを含む内容を投稿する場合に利用します。

現象

PowerShellからSlackにpostすると次の2つの問題があります。

  1. 日本語文字が「?」になします。
  2. 改行コードに「\n」を入れても「\」が自動でエスケープされて「\n」がslackに送られるためにslackでは「\n」と表示されます。

対策

  1. GetEncoding('ISO-8859-1')を使い文字エンコーディングを使います
  2. 「\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 へメッセージを投稿する方法

以上

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2