You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Slack的CURL调用转换为PowerShell遇阻求助

用PowerShell的Invoke-WebRequest替代Slack通知的curl命令

我之前也踩过把Slack Bash脚本转PowerShell的坑,核心问题就是PowerShell和Bash在字符串处理、JSON构造上的规则差异。先把场景理清楚:

你原Bash里能正常运行的curl命令应该是类似Slack Webhook的标准请求:

curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"*$COLOUR* $MESSAGE\"}" https://hooks.slack.com/services/XXX/XXX/XXX

而你转换的PowerShell代码大概率因为转义或变量解析逻辑的问题报错,比如你可能写了这样的代码:

Invoke-WebRequest -Method Post -ContentType 'application/json' -Body "{\"text\":\"*$COLOUR* $MESSAGE\"}" -Uri https://hooks.slack.com/services/XXX/XXX/XXX

这个写法的问题在于PowerShell的转义规则和Bash完全不同——PowerShell用**反引号**而非反斜杠`来转义双引号,而且手动构造JSON很容易出现格式漏洞。下面给你两个靠谱的解决方案:

方案1:用ConvertTo-Json构造请求体(推荐)

这个方法彻底规避手动转义的麻烦,先把内容存入哈希表,再转换成标准JSON:

# 直接用变量定义要发送的内容,无需手动转义
$slackContent = @{
    text = "*$COLOUR* $MESSAGE"
}

# 把哈希表自动转换成符合规范的JSON字符串
$jsonPayload = $slackContent | ConvertTo-Json

# 发送请求到Slack Webhook
Invoke-WebRequest -Uri "https://hooks.slack.com/services/XXX/XXX/XXX" `
                  -Method Post `
                  -ContentType "application/json" `
                  -Body $jsonPayload

这个方法的优势在于,不管$COLOUR和$MESSAGE里包含什么特殊字符(只要不是极端破坏JSON的情况),ConvertTo-Json都会自动处理转义,完全避免格式错误。

方案2:手动构造JSON字符串(适合简单场景)

如果你一定要手动编写JSON,记得遵循PowerShell的转义规则——用反引号`转义双引号:

# 注意这里的双引号是用反引号`转义,而非Bash里的反斜杠
$manualPayload = "{`"text`":`"*$COLOUR* $MESSAGE`"}"

Invoke-WebRequest -Uri "https://hooks.slack.com/services/XXX/XXX/XXX" `
                  -Method Post `
                  -ContentType "application/json" `
                  -Body $manualPayload

常见错误排查

如果还是报错,可以先检查这几点:

  • 先输出$jsonPayload或$manualPayload,确认生成的JSON格式是否正确,有没有语法错误
  • 验证$COLOUR和$MESSAGE变量是否已经正确赋值,没有空值或非法字符
  • 如果遇到SSL证书错误(比如内网环境),PowerShell 6+可以添加-SkipCertificateCheck参数跳过验证(生产环境谨慎使用)

内容的提问来源于stack exchange,提问作者Scott Shorkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:55:08