Как использовать вложенные кавычки при вызове сценария powershell в другом файле сценария powershell - PullRequest
1 голос
/ 05 марта 2020

Я хочу сделать следующий вызов в файле сценария powershell:

Invoke-WebRequest -UseBasicParsing -Uri https://myservice.com `
  -ContentType application/json -Method POST `
  -Body '{"jsonproperty1": 200, "jsonproperty2": 1}'

Этот сценарий прекрасно работает при выполнении в powershell. Однако, когда я пытаюсь запустить его как:

powershell -C 'Invoke-WebRequest -UseBasicParsing -Uri https://myservice.com -ContentType application/json -Method POST -Body '{"jsonproperty1": 200, "jsonproperty2": 1}''

, я не могу заставить его работать. Я видел этот вопрос, но ответ там не работает в моем случае. Я перепробовал все возможные комбинации ', " и `, используя различные методы побега, которые я могу придумать. Но я продолжаю получать 400 неверных запросов от моего API, что, как я полагаю, связано с сериализацией jsonbody.

1 Ответ

2 голосов
/ 05 марта 2020

В командной строке powershell -C есть две проблемы:

  • Вы используете встроенный ' символ. внутри вашей общей '...' командной строки без экранирования ; экранируйте их как ''.

  • К сожалению, вам дополнительно необходимо \ -перекрыть встроенные " символы, даже если вы не должен ; этот ответ объясняет почему.

Следовательно:

powershell -C 'Invoke-WebRequest -UseBasicParsing -Uri https://myservice.com -ContentType application/json -Method POST -Body ''{\"jsonproperty1\": 200, \"jsonproperty2\": 1}'''

Однако вы можете избежать этих головных болей при прохождении, передав блок сценариев ({ ... }) для CLI PowerShell , но обратите внимание, что этот работает только с внутри PowerShell ):

# Use a script block, which requires no escaping.
powershell { 
  Invoke-WebRequest -UseBasicParsing -Uri https://myservice.com `
     -ContentType application/json -Method POST `
     -Body '{"jsonproperty1": 200, "jsonproperty2": 1}' 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...