21

I need to send a simple string to a web api using Powershell, and I have to ensure the value in the HTML body has "Quotes" around it, because the content type has to be application/json.

For example:

$specialKey = "101010"
Invoke-RestMethod -Method Put `
                -Uri $keyAssignmentUri `
                -Header @{"content-type"="application/json"} `
                -Body "$specialKey"

When I inspect this call in Fiddler, I see that the body is 101010 instead of "101010". How do I send the body value with quotes?

willem
  • 25,977
  • 22
  • 75
  • 115

3 Answers3

35

In order to have the "Quotes", you need to provide the escape character (`) before every " which you want to print or send.

$PrintQuotesAsString = "`"How do I escape `"Quotes`" in a powershell string?`"" 

Write-Host $PrintQuotesAsString 

"How do I escape "Quotes" in a powershell string?"

enter image description here

henrycarteruk
  • 12,708
  • 2
  • 36
  • 40
Dipanjan Das
  • 481
  • 1
  • 3
  • 7
13

Assuming you don't need to do variable substitution in your string, a simple solution is to just surround it with single quotes to make it a literal string:

$specialKey = '"101010"'
Mark Wragg
  • 22,105
  • 7
  • 39
  • 68
  • If you have variables in your string such as `$string = 'Found $count records in "test" file'` then this is not a solution as the variable value won't print to the string. Dipanjan's answer, below, works though. – n8. Jun 27 '22 at 18:34
  • 1
    I agree this shouldn’t be the accepted answer. It’s a potential solution for some scenarios but it’s not the right answer to the question. – Mark Wragg Jun 27 '22 at 18:37
10

Replacing double quotes (") with a sequence of back-slash, backtick and double-quotes worked for me:

\`"

Example: I want to set (using the env command) an environment variable named SCOPES to the following value, then launch node app.js:

{
   "email":"Grant permissions to read your email address",
   "address":"Grant permissions to read your address information",
   "phone":"Grant permissions to read your mobile phone number"
}

so I used:

env SCOPES="{ \`"email\`": \`"Grant permissions to read your email address\`",   \`"address\`": \`"Grant permissions to read your address information\`",   \`"phone\`": \`"Grant permissions to read your mobile phone number\`" }" node app.js

References: http://www.rlmueller.net/PowerShellEscape.htm

Starnuto di topo
  • 3,215
  • 5
  • 32
  • 66