Управляющая книга автоматизации Azure не может проанализировать данные webhookdata как объект JSON

Я сильно поражен этой проблемой. Я прошу вас ответить или дать подсказку. У меня заканчиваются варианты.

Я называю лазурную книгу запусков при высокой загрузке ЦП через WebHook. Моя проблема в том, что данные Runbook не декодируются должным образом. Например, строка ниже ничего не печатает.

 Write-Output $WebHookData.RequestHeader

Если я пытаюсь явно преобразовать данные в JSON, как это

*$WebhookData = ConvertFrom-Json $WebhookData*

тогда это ошибка метания.

ConvertFrom-Json: недопустимый примитив JSON: . В строке:6 символов:31 + $WebhookData = $WebhookData | ConvertFrom-Json

Кстати, я пытаюсь использовать модуль Runbook, доступный в галерее Azure {Вертикально увеличить виртуальную машину Azure Resource Manager с помощью Azure Automation}

Мой Webhook вызывается из оповещения, созданного на виртуальной машине.

Очень странное наблюдение

Работающий пример WebHood (находится в примере) {"WebhookName": "test1", "RequestBody": " [\ r \ n {\ r \ n \" Message \ ": \" Test Message \ "\ r \ n} \ г \ п ****]****"

Не работает (данные отправляются при вызове Runbook из VM):

{"WebhookName": "test2", "RequestBody": " {\" schemaId \ ": \" AzureMonitorMetricAlert \ "}}

Спасибо

3 ответа

Решение

Я попробовал с веб-крючком, скрипт Write-Output $WebHookData.RequestHeader должно работать нормально.

И если я использую ConvertFrom-Json $WebhookData Я могу воспроизвести вашу проблему, не уверен, почему это произошло, согласно документу, $WebhookData также в формате JSON, если он принят, вы можете использовать ConvertFrom-Json -InputObject $WebhookData.RequestBody, это будет работать нормально.

Мой Runbook:

param
(
    [Parameter (Mandatory = $false)]
    [object] $WebhookData
)

if ($WebhookData) {

    Write-Output $WebhookData.RequestHeader

    $Body = ConvertFrom-Json -InputObject $WebhookData.RequestBody
    Write-Output $Body

} else
    {
        Write-Output "Missing information";
        exit;
    }

Скрипт powershell, который я использовал для отправки webhook:

$uri = "https://s5events.azure-automation.net/webhooks?token=xxxxxxxxxxxx"

$vms  = @(
            @{ Name="vm01";ResourceGroup="vm01"},
            @{ Name="vm02";ResourceGroup="vm02"}
        )
$body = ConvertTo-Json -InputObject $vms
$header = @{ message="StartedbyContoso"}
$response = Invoke-WebRequest -Method Post -Uri $uri -Body $body -Headers $header
$jobid = (ConvertFrom-Json ($response.Content)).jobids[0]

Выход:

Я получал ту же ошибку. Из моего тестирования видно, что при выполнении «теста» модуля runbook данные веб-перехватчика принимаются в виде обычного текста, но при удаленном вызове они приходят уже в формате JSON. Вот мое решение, охватывающее оба сценария, и до сих пор оно работало хорошо...

      Param (
    [object] $WebhookData
)
# Structure Webhook Input Data
If ($WebhookData.WebhookName) {
    $WebhookName     =     $WebhookData.WebhookName
    $WebhookHeaders  =     $WebhookData.RequestHeader
    $WebhookBody     =     $WebhookData.RequestBody
} ElseIf ($WebhookData) {
    $WebhookJSON = ConvertFrom-Json -InputObject $WebhookData
    $WebhookName     =     $WebhookJSON.WebhookName
    $WebhookHeaders  =     $WebhookJSON.RequestHeader
    $WebhookBody     =     $WebhookJSON.RequestBody
} Else {
   Write-Error -Message 'Runbook was not started from Webhook' -ErrorAction stop
}

У меня была та же проблема, используйте следующее, чтобы получить webhookdata, если использовать тестовую панель с Alert json в качестве ввода

if(-Not $WebhookData.RequestBody){

    $WebhookData = (ConvertFrom-Json -InputObject $WebhookData)
}
$RequestBody = ConvertFrom-JSON -InputObject $WebhookData.RequestBody
Другие вопросы по тегам