ОК, я снова борюсь с преобразованием cURL в PowerShell, особенно в моей структуре хэш-таблицы.На этот раз в хэш-таблице есть несколько элементов в таблице параметров:
Это cURL от Почтальона, который работает правильно:
curl -X POST \
https://example.net \
-H 'Authorization: Bearer 1234567890' \
-H 'Content-Type: application/json' \
-d '{
"data": [
{
"DUID": 3299,
"AID": 551,
"CID": 10002,
"Parameters": [
{
"name": "Customer.*/Address1",
"value": "Street 1"
},
{
"name": "Customer.*/Address2",
"value": "Street 2"
},
{
"name": "Customer.*/City",
"value": "Somewhere"
},
{
"name": "Customer.*/State",
"value": "NSW"
},
{
"name": "Customer.*/PostCode",
"value": "1234"
}
]
}
]
}'
Я пробовал много разных попыток, используя примеры из этогоpost:
cURL to PowerShell - Двойная хеш-таблица в --data?
Это мой текущий скрипт, но PowerShell не нравится закрывающая фигурная скобка,запятая, а затем открывающая фигурная скобка между элементами в таблице параметров:
$URL1 = "https://example.net"
$Body = @{
data = , @{
DUID= 3299
AID= 551
CID= 10002
Parameters = @{
name = "Customer.*/Address1"
value = "Street 1"
},
{
name = "Customer.*/Address2"
value = "Street 2"
},
{
name = "Customer.*/City"
value = "Somewhere"
},
{
name = "Customer.*/State"
value = "NSW"
},
{
name = "Customer.*/PostCode"
value = "2345"
}}}
$CurlArgument = '-s', '-X', 'POST',
'-H', 'Content-Type: application/json',
$URL1,
'-H',
$AuthBearer,
'-d',
($Body | ConvertTo-Json -Depth 4) -replace '"', '\"'
Write-Host "Command took" (Measure-Command {& $CURLEXE @CurlArgument}).TotalSeconds "Seconds" -ForegroundColor Yellow
Я пытался извлечь дополнительные скобки, добавляя @ перед скобками, вынимая запятые, но хеш-таблица не 'неправильно отформатирован, и мой запрос cURL не выполняется.Из-за ограничений я не могу ПАТЧИРОВАТЬ параметры после их добавления, поэтому мне нужно отправить вышеприведенное в одной команде.
Любая помощь (снова) будет принята с благодарностью.Я пытался зайти в Google и прочесть о хеш-таблицах, но не смог найти никакой помощи.
Когда я сейчас смотрю на свой $ CurlArgument, он выглядит так (что неправильно):
{
\"data\": [
{
\"CID\": 10002,
\"DUID\": 3299,
\"AID\": 551,
\"Parameters\": [
{
\"value\": \"Street 1\",
\"name\": \"Customer.*/Address1\"
},
{
\"Attributes\": \"\",
\"File\": null,
\"IsFilter\": false,
\"IsConfiguration\": false,
\"Module\": null,
\"StartPosition\": \"System.Management.Automation.PSToken\",
\"DebuggerHidden\": false,
\"Id\": \"1234567890\",
\"Ast\": \"{\r\n name = \\"Customer.*/Address2\\"\r\n value = \\"Street 1\\"\r\n }\"
},
... snip
Ответ Благодаря Майку Твк я отредактировал свой скрипт, и он заработал
$URL1 = "https://example.net"
$Body = @{
data = , @{
DUID= 3299
AID= 551
CID= 10002
Parameters = @{
name = "Customer.*/Address1"
value = "Street 1"
},
@{
name = "Customer.*/Address2"
value = "Street 2"
},
@{
name = "Customer.*/City"
value = "Somewhere"
},
@{
name = "Customer.*/State"
value = "NSW"
},
@{
name = "Customer.*/PostCode"
value = "2345"
}}}
$CurlArgument = '-s', '-X', 'POST',
'-H', 'Content-Type: application/json',
$URL1,
'-H',
$AuthBearer,
'-d',
($Body | ConvertTo-Json -Depth 4) -replace '"', '\"'
Write-Host "Command took" (Measure-Command {& $CURLEXE @CurlArgument}).TotalSeconds "Seconds" -ForegroundColor Yellow