在 powershell 脚本参数中包含换行符

问题描述

我正在使用 .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