我一直在努力将另一个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]周围吗?
答案 0 :(得分:3)
执行以下操作:$GetGroupID2 = '['+$GetGroupID+']'
您正在创建字符串[31]
,因此该值将由ConvertTo-Json
cmdlet引用。
实际上,它应该作为数组的单个元素输出,因此如果您这样做,则:
'GroupId' = @($GetGroupID2)
您正在将GroupId
值强制为数组,因此输出将如下所示:
"data": {
"CID": 1234,
"GroupId": [
31
]
}