検証環境

  • Windows 11 Pro (24H2) 2025/7/29
  • Discord (stable 423963)

Discord側の設定

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

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

スクリプトファイル①:投稿文をスクリプト内で記入

スクリプト実行する前にダウンロード属性は消そうね

サンプルを試す場合「.ps1」ファイル内の「ウェブフックURL」を書き換えないと動かないぞ

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

Discord_push_sample.ps1ファイルの解説

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

本文に改行を入れたい時は「\n」
「\」自体を入れたい場合は「\\\\」と入力しよう…って、なんで「\\\\」って4つなの?→JsonとDiscordの二重で「\」エスケープ文字の無効化を行わなければいけないので、4つになっちゃうんです

# ユーザー名(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)

スクリプト実行する前にダウンロード属性は消そうね

サンプルを試す場合「.ps1」ファイル内の「ウェブフックURL」を書き換えないと動かないぞ

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

Discord_push_TextFileMessage_sample.ps1ファイルの解説

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

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

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

# デバッグ用テキストファイル名、普段は出力しない
$debugfilename = "debug.txt"

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

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

# ※※※Discordで装飾されてしまう文字をエスケープ文字で無効化※※※

# "\"を"\\"という文字列に変換する
# (Powershell -replace パラメーター1つ目で"\"は特殊文字扱いなので"\"は"\\"と記入)
$contentstr = $contentstr -replace "\\","\\"

# "#"を"\#"という文字列に変換する
$contentstr = $contentstr -replace "#","\#"

# "_"を"\_"という文字列に変換する
$contentstr = $contentstr -replace "_","\_"

# "~"を"\~"という文字列に変換する
$contentstr = $contentstr -replace "~","\~"

# "-"を"\-"という文字列に変換する
$contentstr = $contentstr -replace "-","\-"

# "|"を"\|"という文字列に変換する
# (Powershell -replace パラメーター1つ目で"|"は特殊文字扱いなので"|"は"\|"と記入)
$contentstr = $contentstr -replace "\|","\|"

# "*"を"\*"という文字列に変換する
# (Powershell -replace パラメーター1つ目で"*"は特殊文字扱いなので"*"は"\*"と記入)
$contentstr = $contentstr -replace "\*","\*"

# "`"を"\`"という文字列に変換する
# (Powershell の文字列で"`"は特殊文字扱いなので"`"は"``"と記入)
$contentstr = $contentstr -replace "``","\``"

# デバッグ用テキストファイルを出力
# Discordにはこの内容で投稿される
# 普段は出さないのでコメントアウト
#Set-Content $debugfilename -Value $contentstr -Encoding utf8

# ※※※jsonデータ形式に※※※

# jsonでは"\"はエスケープ文字扱いになるので"\"を"\\"という文字列に変換する
# (Powershell -replace パラメーター1つ目で"\"は特殊文字扱いなので"\"は"\\"と記入)
$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へjsonデータを送る※※※

#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で
当然絵文字も使える

サンプル

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

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

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

\\円\\円\\円\\
__アンダーバー__アンダーバー__アンダーバー__
**アスタリスク**アスタリスク**アスタリスク**
## ハッシュ ## ハッシュ ## ハッシュ ##
~~チルダ~~チルダ~~チルダ~~
--ハイフン--ハイフン--ハイフン--
||パイプ||パイプ||パイプ||

スクリプトファイル③:(おまけ)グローバルIPアドレス付きの投稿文

スクリプト実行する前にダウンロード属性は消そうね

サンプルを試す場合「.ps1」ファイル内の「ウェブフックURL」を書き換えないと動かないぞ

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

こんな感じで表示されます

Discord_push_global_ip_sample.ps1ファイルの解説

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

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

Discord投稿文でコードブロックを表示したい場合「```コード```」という感じで記入するが
Powershellでは「`」をエスケープ文字列として認識するため、
スクリプトの中では「``````コード``````」という感じで入力する事になる

# ユーザー名(username)
$usernemestr = "usernameテスト"

# グローバルIPを取得
# https://ipinfo.io/ip のWebサービスを使用
$globalip =  (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content

# 本文内容(content)
$contentstr = "グローバルIPアドレス表示テスト\n``````" + $globalip + "``````"
# ウェブフック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_global_ip_sample.batファイルの解説

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

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

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

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

set ps1filename="%~dp0Discord_push_global_ip_sample.ps1"

powershell -ExecutionPolicy Unrestricted -File %ps1filename%

参考Web