如何在powershell中正确使用post请求

时间:2017-06-13 16:44:54

标签: powershell webrequest

目前我正在尝试使用正在使用cURL的API,我正在尝试将其转换为PowerShell。

目前该公司给出的例子是使用cURL:

$ 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"]}'

现在我正在尝试使用以下内容使用Invoke-WebRequest方法在powershell中转换它:

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

我感到困惑的部分是如何将-Body请求格式化为类似于:

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

LDT部分是我通过一个数组而不是ldt我试图调用一个变量,如$ detect,但我无法。

3 个答案:

答案 0 :(得分:2)

你可以创建一个哈希表并转换为json:

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

或者如果检测是一个数组,您可以省略()周围的$detections

答案 1 :(得分:1)

您无法使用变量,因为您使用的是单引号'字符串,它不解释变量或转义序列。您需要使用双引号"字符串。由于你的字符串包含双引号,你需要使用PowerShell的转义字符来转义它们,这是反引号`

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

这可能不是你想要的;你可能想要将数组序列化为JSON,在这种情况下你应该使用4c74356b41's answer;即:使用所需的值创建对象,然后在运行时将其转换为JSON。这不容易出错。

答案 2 :(得分:0)

您可以在JSON主体的外部使用双引号字符串,然后您可以包含变量:

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