Вызов Powershell-WebRequest [Произошла ошибка при обработке запроса]

#powershell #httpwebrequest #invoke-webrequest

#powershell #httpwebrequest #вызов-webrequest

Вопрос:

Я работаю над проектом по автоматизации создания пользователей AD, созданию папок в разных отделах / секциях для пользователей, а также автоматической отправке пароля при создании пользователя AD на их мобильные телефоны и загрузочного пакета в почте компании пользователя.

У меня возникла проблема с выполнением этого в PowerShell, это отлично работает на Python (моем основном языке). Я получаю эту странную ошибку при попытке обработать мой запрос в powershell.

Код:

 $url = "hiding_this_for_obvious_reasons" # Request URL

$nummer = Read-Host("Skriv inn mobil nummer: ")
$tekst = Read-Host("Skriv inn melding: ")

#Request Payload information
$JSON = @'
{
            "content": "$tekst",
            "senderNumber": "SSB",
            "targetNumbersAsDelimitedString": "47$nummer",
            "sendDate": null,
            "status": {"id": "5"},
            "numberOfTargetNumbers": null,
            "numberOfInvalidNumbers": ""
}
'@

Invoke-WebRequest -Uri $url -Method Post -Body $JSON -ContentType "application/json"
  

Сообщение об ошибке следующего вида:

 Invoke-WebRequest : Error happened while processing request 
At H:ScriptsPowershell ScriptsClearADSendSMSPowershell.ps1:19 char:1
  Invoke-WebRequest -Uri $url -Method Post -Body $JSON -ContentType "ap ...
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExce 
   ption
      FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
  

Ответ №1:

Похоже, вы пытаетесь использовать переменные, но внутри одинарных кавычек. Для расширения переменных необходимо заключить их в двойные кавычки.

Попробуйте это:

 $JSON = @"
{
            "content": "$tekst",
            "senderNumber": "SSB",
            "targetNumbersAsDelimitedString": "47$nummer",
            "sendDate": null,
            "status": {"id": "5"},
            "numberOfTargetNumbers": null,
            "numberOfInvalidNumbers": ""
}
"@
  

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

1. Ах, я понимаю, я программист на python, так что powershell на самом деле не моя область. В любом случае я все еще получаю ту же ошибку после изменения. Есть идеи?

2. К сожалению, в остальном ошибка слишком расплывчата. Я предполагаю, что вы отправляете не тот JSON, который он ожидает.

3. На самом деле отправленный вами код сработал, он просто отправил ошибку в любом случае, даже несмотря на то, что я получил SMS. Спасибо, чувак! 😀

Ответ №2:

Это работает у меня там, где я пытался это сделать:

 Invoke-RestMethod -Uri $uri -Headers $header -Method POST -ContentType "text/plain" -Body $body
  

и конечная точка продолжает возвращаться с

Метод Invoke-RestMethod : {«code»:»Invalid_Request», «message»: «Произошла ошибка при чтении тела запроса».,»CorrelationId»: «xxxxxx»}

где содержимое переменной $body было

 $body = @{
      'userId' = $userId
      'username'  = $userename
}
  

и это сработало, когда я заменил приведенное выше на

 $body = @"
        {
            "userID": "$userId",
            "username": "$username"
        }
"@
  

Мне было бы интересно узнать, почему?