将CURL命令转换为Invoke-RestMethod

时间:2019-11-21 17:16:39

标签: powershell curl

我正在努力将有效的CURL命令转换为PowerShell,以便可以利用Invoke-RestMethod。

  1. CURL命令似乎可以正常工作。
  2. 我可以使用Invoke-RestMethod击中远程API上的其他端点
  3. 我感觉格式化“ organizationIds”数字数组的方式出了点问题,但是我似乎无法弄清楚(当然,它也可能完全是其他原因)

这是我的CURL命令的示例:

curl.exe "https://cert-manager.com/api/report/v1/ssl-certificates" -i -X POST -H "customerUri: InCommon" -H "Content-Type: application/json;charset=utf-8" -H "login: MyUserNameInfoGoesHere" -H "password: MyPasswordInfoGoesHere" -d "{\"from\":\"2019-08-05T00:00:00.000Z\",\"to\":\"2019-11-03T00:00:00.000Z\",\"organizationIds\":[3637,574,570],\"certificateStatus\":0,\"certificateDateAttribute\":3,\"certificateRequestSource\":0}"

这就是我一直在PowerShell中摆弄的东西:

[string]$from = "2019-08-05T00:00:00.000Z";
[string]$to = "2019-11-03T00:00:00.000Z";
$organizationIds = @(3637, 574, 570);
[int]$certificateStatus = 0;
[int]$certificateDateAttribute = 3;
[int]$certificateRequestSource = 0;   
[PsObject]$data = @(
    @{
        from                     = $from
        to                       = $to
        organizationIds          = $organizationIds
        certificateStatus        = $certificateStatus
        certificateDateAttribute = $certificateDateAttribute
        certificateRequestSource = $certificateRequestSource
    }
)
$jsonData = ConvertTo-Json -InputObject $data;
[System.Collections.Generic.Dictionary[[String], [String]]]$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]";
Set-StandardHeaderConfig -Headers $headers;
[string]$method = "POST";
$certificateReport = Invoke-RestMethod -Uri $uri -Headers $headers -Method $method -Body $jsonData;

哦,这是我的“ Set-StandardHeaderConfig” PowerShell函数(对我的其他调用来说这很好):

Function Set-StandardHeaderConfig {
param (
    [Parameter(Mandatory = $true)][System.Collections.Generic.Dictionary[[String], [String]]]$headers
)
$headers.Add("Content-Type", "application/json; charset=UTF-8");
$headers.Add("login", MyUserNameInfoGoesHere);
$headers.Add("password", MyPasswordInfoGoesHere);
$headers.Add("customerUri", "InCommon");

有人可以帮助我向正确的方向推一下,以解决此问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我想我可能会看到问题。在运行代码并分析$jsonData变量时,似乎已向对象添加了额外的valueCount属性。

通过比较curl命令发送的JSON正文与$jsonData = ConvertTo-Json -InputObject $data;产生的JSON,我发现了这一点

enter image description here

尝试更改

$jsonData = ConvertTo-Json -InputObject $data;

$jsonData = $data | ConvertTo-Json

那为我删除了那些额外的属性。