#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"
}
"@
Мне было бы интересно узнать, почему?