问题描述
我正在使用 .bat 文件来调用 powershell 脚本。
Powershell.exe -executionpolicy remotesigned -File C:\Users\%UserName%\Desktop\PushOverPS.ps1 "Line1\nLine2"
我希望我的 pushover 消息是多行的,上面只有一行,里面有 \n。 Pushover 支持人员说我应该尝试包含换行符而不是 \n。我该怎么做?
这是powershell脚本:
$uri = "https://api.pushover.net/1/messages.json"
$parameters = @{
token = "removed"
user = "removed"
message = $args[0]
}
$parameters | Invoke-RestMethod -Uri $uri -Method Post
我的 .bat 文件正在向 PS 脚本传递一个参数(字符串)。到目前为止,在传递的字符串中添加 \n 或 ` 不会产生多行消息。
解决方法
在 powershell 的新换行符之前使用反勾号,
`n
,
输入仍为“Line1\nLine2”,修改这一行:
message = $args[0] -replace "\\n","`n"
测试代码:
$uri = "https://api.pushover.net/1/messages.json"
$parameters = @{
token = "removed"
user = "removed"
message = $args[0] -replace "\\n","`n"
}
write-host $parameters.message
但不确定`n 是否会正确传递到帖子中。也许将 `n 替换为 url 编码版本:%0A。
编辑:更新了代码,因此输出消息参数用引号括起来,目标 Web api 可能需要它来支持参数中的换行符。 OP 已确认此方法有效。
$uri = "https://api.pushover.net/1/messages.json"
$parameters = @{
token = "removed"
user = "removed"
message = "`"" + $($args[0] -replace "\\n","`n") + "`""
}
write-host $parameters.message