Jack McAloon
Jack McAloon

Reputation: 11

How to use a post request correctly within powershell

Currently I am trying to work with an API that is utilizing cURL and I am trying to convert it to PowerShell.

Currently the example given by this company is by using cURL is:

$ curl -X POST -u "youruser:yourkey" -H "Content-Type: application/json" 
"https://falconapi.crowdstrike.com/detects/entities/summaries/GET/v1" -d 
'{"ids": ["ldt:ddaab9931f4a4b90450585d1e748b324:148124137618026"]}'

Right now I am trying to convert this within powershell by using the Invoke-WebRequest method using the following:

Invoke-WebRequest -Method Post -Uri $site  -Body  -Credential 'whatever credentials' | 
ConvertFrom-Json | Select -ExcludeProperty resources

The part I am getting confused on is how to format the -Body request to be something similar to:

'{"ids": ["ldt:ddaab9931f4a4b90450585d1e748b324:148124137618026"]}'

where the LDT part is I am going through an array so instead of the ldt I am trying to call a variable such as $detections, but I am unable to.

Upvotes: 1

Views: 498

Answers (3)

briantist
briantist

Reputation: 47792

You aren't able to use a variable because you're using single quoted ' strings, which don't interpret variables or escape sequences. You need to use a double quoted " string for that. Since your string contains double quotes you'd need to escape them with PowerShell's escape character, which is the backtick `.

"{`"ids`": [`"ldt:$detections`"]}"

This likely not what you want though; you probably want to serialize the array into JSON, in which case you should use 4c74356b41's answer; that is: create an object with the values you want and then convert it to JSON at runtime. This is much less error prone.

Upvotes: 1

Mark Wragg
Mark Wragg

Reputation: 23355

You could use double quoted strings around the outside of your JSON body and then you are able to include the variable:

Invoke-WebRequest -Method Post -Uri "{'ids': ['ldt:$detections']}"  -Body  -Credential 'whatever credentials' |
    ConvertFrom-Json | Select -ExcludeProperty resources

Upvotes: 0

4c74356b41
4c74356b41

Reputation: 72171

You could just create a hash table and convert to json:

-body (@{ids = ($detections)} | ConvertTo-Json)

or if detections is an array you could omit the () around $detections

Upvotes: 2

Related Questions