Управляющая книга автоматизации 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