Формат для json через powershell - PullRequest
2 голосов
/ 25 февраля 2020

Я пытаюсь использовать powershell для отправки json в DevOps API. Я не могу понять, как правильно отформатировать это, чтобы PowerShell это восприняла. Я продолжаю получать эту ошибку. Любой совет? Я могу использовать тот же json в Почтальоне без каких-либо проблем. Спасибо

$URI= "https://vsaex.dev.azure.com/$ClientOrg/_apis/userentitlements?api-version=5.1-preview.2" $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($PAT)")) }

Invoke-RestMethod -uri $URI -Method POST -Headers $AzureDevOpsAuthenicationHeader -Body $a -ContentType "application/json"


$a= ConvertFrom-JSON @'
{
  "accessLevel": {
      "licensingSource": "msdn",
      "accountLicenseType": "enterprise",
      "msdnLicenseType": "enterprise"
  },
  "extensions": [
    {
      "id": "ms.feed" 
    }
  ],
  "user": {
    "principalName": "email@mail.com",
    "subjectKind": "user"
  },
  "projectEntitlements": [
    {
      "group": {
        "groupType": "projectAdministrator"
      },
      "projectRef": {
        "id": "0685a10e"
      }
    }
   ]
  }
'@



Invoke-RestMethod : {"$id":"1","innerException":null,"message":"Value cannot be null.\r\nParameter name: userEntitlement","typeName":"System.ArgumentNullException, 
mscorlib","typeKey":"ArgumentNullException","errorCode":0,"eventId":0}
At line:4 char:1
+ Invoke-RestMethod -uri $URI -Method POST -Headers $AzureDevOpsAutheni ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

1 Ответ

1 голос
/ 25 февраля 2020

Ваше тело должно быть самой строкой JSON, а не объектом, построенным из JSON.

$a= @'
{
  "accessLevel": {
      "licensingSource": "msdn",
      "accountLicenseType": "enterprise",
      "msdnLicenseType": "enterprise"
  },
  "extensions": [
    {
      "id": "ms.feed" 
    }
  ],
  "user": {
    "principalName": "email@mail.com",
    "subjectKind": "user"
  },
  "projectEntitlements": [
    {
      "group": {
        "groupType": "projectAdministrator"
      },
      "projectRef": {
        "id": "0685a10e"
      }
    }
   ]
  }
'@

Invoke-RestMethod -uri $URI -Method POST -Headers $AzureDevOpsAuthenicationHeader -Body $a -ContentType "application/json"
...