#powershell #linefeed
Вопрос:
Я использую файл .bat для вызова сценария powershell.
Powershell.exe -executionpolicy remotesigned -File C:Users%UserName%DesktopPushOverPS.ps1 "Line1nLine2"
Я хочу, чтобы мое сообщение о переносе было многострочным, а в приведенном выше сообщении есть только одна строка с символом 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 или ` в передаваемую строку не приводит к многострочному сообщению.
Комментарии:
1. Понятия не имею, но я подозреваю, что было бы проще переработать ваш
PushOverPS.ps1
скрипт, чтобы он принимал несколько аргументов вместо одной многострочной строки…2. Вы могли бы попробовать отступ вместо обратной косой черты —
Line1`nLine2
. Это обычная escape-последовательность для ввода строки в Powershell.
Ответ №1:
используйте обратную галочку перед новой строкой для powershell,
`n
Ответ №2:
С вводом по-прежнему «Line1nLine2», измените эту строку:
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:
.
ИЗМЕНИТЬ: обновлен код, поэтому параметр выходного сообщения заключен в кавычки, что может потребоваться целевому веб-api для поддержки новых строк в параметрах. ОП подтвердил, что это работает.
$uri = "https://api.pushover.net/1/messages.json"
$parameters = @{
token = "removed"
user = "removed"
message = "`"" $($args[0] -replace "\n","`n") "`""
}
write-host $parameters.message
Комментарии:
1. Я могу заменить n на
, но тогда я просто получу следующее: Строка 1
Line2. Больше ничего не помогало.2. Я имел в виду заменить `n на
в powershell. Ваш пакетный ввод скрипта все равно должен использовать n. Как вы проверяете свой вывод? Это через api.pushover.net? Возможно, проблема в том, что мы не используем правильный символ новой строки, который api.pushover.net принимает. Глядя на pushover.net/api , Я не вижу никакого упоминания о поддержке новой строки, даже в разделе стиля html (например: <br>). Попробуйте заменить `n на <br> в powershell?3. Вы пробовали тестовый код выше, где n заменяется на `n в powershell? В соответствии с этим support.pushover.net/… , отправка фактического символа новой строки в api работает. Может быть, сообщение нуждается в кавычках вокруг него? сообщение = «`»» $($args[0] -заменить «\n»,»<br>») «`»»
4. Я хотел использовать `n вместо <br>: сообщение = «`»» $($args[0] -заменить «\n»,»`n») «`»», Поэтому вывод: строка 1: <br>
"Line1
строка 2:Line2"
5. Использование этого в сценарии PS: »
"" $($args[0] -replace "\n","
n») » ` «» и это в файле .bat: «Line1nLine2» приводит к сообщению, которое выглядит следующим образом: «Line1Line2″, за исключением того, что строка» Line2 » находится в нижней строке.