Включите поток строк в аргумент сценария powershell

#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 » находится в нижней строке.