Powershell-调用RestMethod-POST嵌套JSON



我正在尝试与API交互,将一些数据POST到我们使用的服务中,以便将一些电子邮件地址添加到策略中。这最终会得到一个电子邮件地址列表,并为每个地址循环使用,但目前我只是想让它与一个地址一起使用。

我使用的是Powershell 7,我想说我是Powershell的中间人,但这是我第一次尝试与API交互,使用JSON和Invoke-RESTMethod命令行。该服务的API参考显示了许多其他语言的代码示例,而不是PS!

这是我遇到的问题。我试图制定一个-Body语句,它看起来是3个元素,而不是两个。以下是CURL:中的示例语句

{
"custodians": [
{
"emailId": "john.doe@someorg.com"
}
],
"action": "add"
}

动作:添加部分很好,容易上手。我正试图弄清楚如何正确格式化保管人部分。我不知道怎样做三个元素而不是两个元素。我尝试过{}[]和((的不同组合,但没有成功:

"custodians" = ({"emailId" = "emailaddress@place.com"})

给了我一个";赋值表达式无效";错误

"custodians" = [{"emailId" = "emailaddress@place.com"}]

"custodians" = [@{"emailId" = "emailaddress@place.com"}]

给我一个";"["后缺少类型名称。"错误。

这些,以及我键入的其他一些组合,都在VSCode中显示了格式错误,所以我已经知道它们不起作用,我只是不确定为什么。我确信我只是没有破解@、{}、[]或((的正确组合,但我似乎在网上找不到任何显示如何使用三个元素格式化的信息(可能是因为我在搜索中没有使用正确的词汇或短语(。

如果它相关或有用,这里是我正在处理的整个查询的一个更大的代码示例。假设Auth头很好(到目前为止,我可以请求我的Auth令牌并执行GET,没有问题(:

$headers = @{
"Authorization" = $bearerAuthValue
"Accept" = "application/json"
"Content Type" = "application/json"
} 
$body = @{
"custodians" = @(emailId = "emailaddress@place.com"),
"Action" = "add"
}
$uri = "https://thisisanaddress.com"
Invoke-RestMethod -Method 'POST' -Uri $uri -Headers $headers -Body $body

您正在考虑在保管人中拥有多个电子邮件ID?

$body = @{
custodians = @(
@{emailId = 'emailaddress@place.com' }
@{emailId = 'emailaddress@place.com' }
@{emailId = 'emailaddress@place.com' }
)
Action = 'add'
}

输出:

$body | ConvertTo-Json
{
"Action": "add",
"custodians": [
{
"emailId": "emailaddress@place.com"
},
{
"emailId": "emailaddress@place.com"
},
{
"emailId": "emailaddress@place.com"
}
]
}

最新更新