Invoke-ResMethod Rest API

Я впервые обращаюсь сюда.

Я пытаюсь создать скрипт для Ivanti Appsense, используя json code powershell, но столкнулся с проблемой

я продолжаю получать ответное сообщение «запрос недействителен», я надеюсь, что смогу получить некоторую помощь так что в powershell это мой код

$url = "http://server/path/api/ImmediateTask"
$cred = Get-Credential
 
$body = @"
{
   "id":"the ID",
   "operations" = [
      {
         "windowsSettingsGroupDisplayName": "_Active Setup",
         "operation":{
            "liveSettingsDelete":{
               "deleteRegistry": true,
               "deleteFiles": true,
               "preserveArchives": true
            }
         }
      }
"@
 
 
$request = Invoke-RestMethod  -Method post -Credential $cred -Uri $url -Body $body -ContentType "application/json" 
 
$request

однако, когда я запускаю его и использую правильные учетные данные, это мой вывод

output

Возможно, вы не должны указывать id заранее при создании новой задачи?

Mathias R. Jessen 17.05.2022 13:20

Разве в вашем $body не хватает закрывающей квадратной скобки и закрывающей фигурной скобки?

scottwtang 17.05.2022 13:29

@scottwtang Я только что добавил закрывающий квадрат, потому что сам это заметил, но это не повлияло.

Hendrik Hoppentocht 17.05.2022 13:36

@Mathias R. Jessen Идентификатор необходим, потому что он относится к конкретному пользователю, к которому вы пытаетесь применить действие.

Hendrik Hoppentocht 17.05.2022 13:37

Попробуйте также с ConvertTo-Json на $body, так как ваш ContentType это application/json

scottwtang 17.05.2022 13:41

@scottwang Я только что попытался добавить его в тело, используя $request = Invoke-RestMethod -Method post -Credential $cred -Uri $url -Body ($body | ConvertTo-Json) -ContentType "application/json", но это не так. иметь какой-либо эффект

Hendrik Hoppentocht 17.05.2022 13:50
"operations" = [" также является недопустимым json - вы используете = вместо ``:. I think you need to rework how you're generating the json to get some help from PowerShell's parser *before* you call Invoke-WebRequest```
mclayton 17.05.2022 15:03

@mclayton Спасибо, что заметили, что я использовал и = вместо «:», это осталось от теста, который я сделал ранее. кроме того, что код Json был проверен и должен быть действительным. Я также проверил документацию API и не смог найти никаких проблем. я также пытался изменить Invoke-RestMethod на Invoke-WebRequest. мне это тоже не помогло. я надеюсь, что у вас есть еще несколько предложений

Hendrik Hoppentocht 17.05.2022 15:17

@HendrikHoppentocht - в этом случае вы можете обновить свой вопрос, указав действительный json. чтобы ошибки в текущем тексте не отвлекали от реальной проблемы

mclayton 17.05.2022 15:37
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
9
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вы можете использовать функции PowerShell для создания строки json программно, а не делать это вручную. Таким образом, PowerShell будет выдавать вам более содержательные сообщения об ошибках, если ваш синтаксис неверен, а не ждать, пока API выдаст вам общее сообщение «Произошла ошибка»:

$data = [ordered] @{
    "id"         = "the ID"
    "operations" = @(
        [ordered] @{
            "windowsSettingsGroupDisplayName" = "_Active Setup"
            "operation"                       = [ordered] @{
                "liveSettingsDelete" =  [ordered] @{
                    "deleteRegistry"   = $true
                    "deleteFiles"      = $true
                    "preserveArchives" = $true
                }
            }
        }
    )
};

$json = ConvertTo-Json $data -Depth 99;

write-host $json
#{
#  "id": "the ID",
#  "operations": [
#    {
#      "windowsSettingsGroupDisplayName": "_Active Setup",
#      "operation": {
#        "liveSettingsDelete": {
#          "deleteRegistry": true,
#          "deleteFiles": true,
#          "preserveArchives": true
#        }
#      }
#    }
#  ]
#}

$data в основном создает вложенную структуру хеш-таблицы, о которой PowerShell (и ваша IDE) предупредит вас, если у вас отсутствуют скобки, незакрытые кавычки и т. д.

ConvertTo-Json преобразует этот структурированный объект в строку json.

После этого вы все еще можете получать ошибки от своего API, но, по крайней мере, вы будете знать, что ваш json действителен.

Спасибо за информацию. С ним я смог решить свою проблему

Hendrik Hoppentocht 17.05.2022 16:00

Другие вопросы по теме