検証環境

  • Windows 10 Pro 64bit (21H1)
  • Windows 10 Pro 64bit (21H2) 2023/12/22
  • Discord

Discord側の設定

私は以下のWebサイトを参考にしました

詳しくは「Webhook Discode」でググって!!
ウェブフックURLは、下記のPowerShellスクリプトファイル内で使うぞ!!

スクリプトファイル

投稿文がスクリプト内にあるパターン

Discord_push_sample.ps1ファイルの解説

Powershellのスクリプトファイル
スクリプトファイル内の文字エンコードは「UTF-8(BOM付き)」
※必ずBOM付きの必要あり

サンプルを試す場合、最低限「ウェブフックURL」は書き換えないと動かないぞ

本文に改行を入れたい時は「\n」を、「\」自体を入れたい場合は「\\」と入力しよう

# ユーザー名(username)
$usernemestr = "usernameテスト"
# 本文内容(content)
$contentstr = "テスト🐈1行目\nテスト🐈2行目\nテスト\\3行目"
# ウェブフックURL(Webhook URL)
$webhookurl = "https://discord.com/api/webhooks/**************************"

# json文字列を作成して、UTF-8に変換する
$bodyjson = "{`"username`": `"$usernemestr`", `"content`": `"$contentstr`"}"
$body = [System.Text.Encoding]::UTF8.GetBytes($bodyjson)

#Discordに送る
Invoke-WebRequest -Headers @{"Content-Type"="application/json"} -Method Post -Body $body $webhookurl

Discord_push_sample.batファイルの解説

Powershellのスクリプトファイルを実行するためのバッチファイル
バッチファイル内の文字エンコードは「Shift-JIS」

「Discord_push_sample.ps1」と「Discord_push_sample.bat」は同じフォルダに置いてね

なんで直で実行しないかと言うと、Powershell側であらかじめ実行権限の設定を色々しなきゃいけなくて、それは面倒なので一時的に実行権限を持って実行できる書き方をバッチファイルに書いてる

rem ---------------------------------------
rem 同じフォルダにあるDiscord_push_sample.ps1をpowershellコマンドとして実行
rem
rem [%~dp0]はカレントディレクトリを取得
rem スペース入りファイルパスを想定し["]で囲う
rem ---------------------------------------

set ps1filename="%~dp0Discord_push_sample.ps1"

powershell -ExecutionPolicy Unrestricted -File %ps1filename%

投稿文が別のテキストファイル(UTF-8・改行CRLF)にあるパターン

Discord_push_TextFileMessage_sample.ps1ファイルの解説

Powershellのスクリプトファイル
ファイル内の文字エンコードは「UTF-8(BOM付き)」
※必ずBOM付きの必要あり

サンプルを試す場合、最低限「ウェブフックURL」は書き換えないと動かないぞ

# ユーザー名(username)
$usernemestr = "usernameだよ"

# 本文内容のテキストファイル名
# テキストファイルのエンコーディングはUTF-8(BOMは有・無どっちでも)、改行はCRLFで
# ファイル名はフルパス指定でも動くぞ
# 例えば $pushfilename = "d:\hoge\hoge\file.txt" とか
$pushfilename = "file.txt"

# ウェブフックURL(Webhook URL)
$webhookurl = "https://discord.com/api/webhooks/**************************"

#テキストファイルの内容を取り出す
$contentstr = Get-Content $pushfilename -Raw -Encoding utf8

# "\"を"\\"という文字列に変換する(\は特殊文字扱いなので\\としてエスケープ)
$contentstr = $contentstr -replace "\\","\\\\"

# 改行(CRLF)を"\n"という文字列に変換する
$contentstr = $contentstr -replace "`r`n","\n"

# json文字列を作成して、UTF-8に変換する
$bodyjson = "{`"username`": `"$usernemestr`", `"content`": `"$contentstr`"}"
$body = [System.Text.Encoding]::UTF8.GetBytes($bodyjson)

#Discordに送る
Invoke-WebRequest -Headers @{"Content-Type"="application/json"} -Method Post -Body $body $webhookurl

Discord_push_TextFileMessage_sample.batファイルの解説

Powershellのスクリプトファイルを実行するためのバッチファイル
バッチファイル内の文字エンコードは「Shift-JIS」

「Discord_push_TextFileMessage_sample.ps1」と「Discord_push_TextFileMessage_sample.bat」は同じフォルダに置いてね

なんで直で実行しないかと言うと、Powershell側であらかじめ実行権限の設定を色々しなきゃいけなくて、それは面倒なので一時的に実行権限を持って実行できる書き方をバッチファイルに書いてる

rem ---------------------------------------
rem 同じフォルダにあるDiscord_push_TextFileMessage_sample.ps1をpowershellコマンドとして実行
rem
rem [%~dp0]はカレントディレクトリを取得
rem [.ps1]の後ろに[;]を付ける必要がある
rem スペース入りファイルパスを想定し["]で囲う
rem ---------------------------------------

set ps1filename="%~dp0Discord_push_TextFileMessage_sample.ps1"

powershell -ExecutionPolicy Unrestricted -File %ps1filename%

file.txtファイル(投稿文が入ったテキストファイル)の解説)

テキストファイルのエンコーディングはUTF-8(BOMは有り・無しどっちでも)、改行はCRLFで
当然絵文字も使える

サンプル

ああああ🐈
いいいい🐈
うううう🐈

ええええ🐶
おおおお🐶
かかかか🐶

きききき❤
くくくく❤
けけけけ❤

参考Web