Пустая полезная нагрузка. Ожидаемый контент в формате JSON. Microsoft Graph и Powershell

#powershell #microsoft-graph-api #microsoft-graph-mail

#powershell #microsoft-graph-api #microsoft-graph-mail

Вопрос:

Я работаю над некоторой автоматизацией, чтобы установить out of office для людей, использующих PowerShell. Я столкнулся с проблемой, но не уверен, где я ошибаюсь.

Когда я запускаю скрипт для отключения выхода из офиса, он выдает сообщение об ошибке с пустой полезной нагрузкой. Ожидаемый контент в формате JSON

 #Setup out of office using graph

#Connect to MS Graph using seamless auth with registered application and client ID secret
# Application (client) ID, tenant Name and secret
$clientId = "xxxxxxx" #application ID
$tenantName = "xxxxxxxx"
$clientSecret = "xxxxxxxx"

$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 

$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody

#user being processed
$upn = "my.email@domain.com"

#out of office settings
$oof = @"
    "@odata.context": "https://graph.microsoft.com/v1.0/users/$upn/mailboxSettings",
    "automaticRepliesSetting": {
        "status": "disabled"
    }

"@

$oof = $oof | ConvertTo-Json

$apiUrl = "https://graph.microsoft.com/beta/users/$upn/mailboxSettings" 

Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -UseBasicParsing -Method patch -ContentType "application/json" -Body $oof -Verbose
 

Это ошибка, которая генерируется

 Invoke-RestMethod : {
    "error": {
      "code": "BadRequest",
      "message": "Empty Payload. JSON content expected.",
      "innerError": {
        "date": "2021-01-11T14:04:16",
        "request-id": "xxxx",
        "client-request-id": "xxxxx"
      }
    }
  }
  At line:33 char:1
    Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse ...
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
        FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
 

Ответ №1:

Попробуйте добавить скобки {}:

 $oof = @"
{
  "@odata.context": "https://graph.microsoft.com/v1.0/users/$upn/mailboxSettings",
  "automaticRepliesSetting": {
    "status": "disabled"
   }
}
"@
 

Комментарии:

1. спасибо, но это все равно выдало ту же ошибку

2. @deniscooper Кроме того, удалите | ConvertTo-Json , потому что в скобках $oof уже действительный JSON

3. .. но с добавлением @ JSONLint больше не проверяет его как json..

4. спасибо, но на самом деле это все равно выдало ту же ошибку — это сработало при удалении опции convertto-json — спасибо