Powershell - Invoke-RestMethod - POST 嵌套 JSON

Powershell - Invoke-RestMethod - POST nested JSON

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

我正在使用 Powershell 7,我会说我是 powershell 的中级,但这是我第一次尝试与 API 交互,使用 JSON,并使用 Invoke-RESTMethod命令行开关。该服务的 API 参考显示了许多其他语言的代码示例,只是 PS!

这是我运行要解决的问题。我正在尝试制定一个 -Body 语句,它看起来是 3 个元素而不是两个。以下是 CURL 中的示例语句:

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

Action:Add部分很好,简单易行。我想弄清楚如何正确格式化保管人部分。我无法弄清楚如何做 3 个元素而不是两个。我尝试了 {} [] 和 () 的不同组合但无济于事:

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

出现“赋值表达式无效”错误

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

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

给我一个“'[' 后缺少的类型名称。”错误。

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

如果相关或有帮助,这里是我正在处理的整个查询的更大代码示例。假设 Auth headers 没问题(到目前为止,我可以请求我的 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"
    }
  ]
}