cURL到PowerShell-方括号中的值

时间:2019-01-01 12:45:00

标签: powershell curl

我一直在努力将另一个cURL转换为PowerShell,特别是使用方括号中的值。

背景:我大约有1,500行进入一个脚本,该脚本接收CSV导入文件,使用它,对其进行验证,然后将其转换为一系列API调用,以使手动完成的过程自动化。我这样做是为了给自己一个学习的机会,因为我以前从未做过API工作。

我有这个cURL命令(来自邮递员):

curl -X PATCH \
 https://example.com \
 -H 'Authorization: Bearer 1234567890' \
 -H 'Content-Type: application/json' \
 -d '{
   "data": {
       "CID": 1234,
       "GroupId": [
           31
       ]
   }
}'

我的难题是在“ GroupId”周围的方括号内。

要将其转换为PowerShell,我已完成以下操作:

$URL = "https://example.com"
$Body = @{
    'data' = @{
        'CID'              = $CustomerID;
        'GroupId'          = $GetGroupID2
        }
}

$CurlArgument = '-X', 'PATCH',
'-H', 'Content-Type: application/json',
$URL1,
'-H', 
$AuthBearer,
'--retry', '2',
'--retry-delay', '3',
'--retry-connrefused',
'-d', 
(($Body | ConvertTo-Json) -replace '"', '\"')

Write-Host "$Section cURL command took" ("{0:n1}" -f (Measure-Command {$PatchGroupResponse = & $CURLEXE @CurlArgument}).TotalSeconds) "Seconds"  -ErrorAction SilentlyContinue

现在,PowerShell“讨厌”包含“ GroupID”的方括号,因此我执行了以下操作(假设$ GetGroupID包含31个(不带引号。我在脚本中更早地获得了它并将其保存到变量中):< / p>

$GetGroupID2 = '['+$GetGroupID+']'

$ GetGroupID2现在包含:[31],但是当我ConvertTo-Json时,我得到了$ GetGroupID2周围的多余引号,[31]变成了“ [31]”,我假设使用-replace命令,但是我没有这样做不知道为什么/如何或如何阻止它。

我的@CurlArgument看起来像这样:

-X
PATCH
-H
Content-Type: application/json
https://example.com
-H
Authorization: Bearer 1234567890
--retry
2
--retry-delay
3
--retry-connrefused
-d
{
    \"data\":  {
                 \"CID\":  1234,
                 \"GroupId\":  \"[31]\"
             }

我对服务器的呼叫失败,原因是: {“缺少参数,参数名称= CID”}。

据我所见,所有内容都与我的cURL命令相同,除了我的GroupID的引号“ [31]”(应为[31])之外。

任何人都可以向我指出为什么多余的引号会出现在[31]周围吗?

1 个答案:

答案 0 :(得分:3)

执行以下操作:$GetGroupID2 = '['+$GetGroupID+']'您正在创建字符串[31],因此该值将由ConvertTo-Json cmdlet引用。

实际上,它应该作为数组的单个元素输出,因此如果您这样做,则:

'GroupId' = @($GetGroupID2)

您正在将GroupId值强制为数组,因此输出将如下所示:

   "data": {
       "CID": 1234,
       "GroupId": [
           31
       ]
   }