Ошибка PatchResourceNotFound при вызове API Azure Rest

когда я вызываю ниже предупреждения журнала, api azure rest может включать / отключать только аналитику приложений) тот же API при вызове предупреждений, созданных в аналитике журнала, выдает ошибку «PatchResourceNotFound»

https://management.azure.com/subscriptions/subid/resourcegroups/RGname/providers/microsoft.insights/scheduledQueryRules/alertname?api-version=2018-04-16

ниже ошибка

{
  "error": {
    "code": "PatchResourceNotFound",
    "message": "The resource 'https://management.azure.com/subscriptions/4776c051-f4ef-4a30-8ce7-c9fb99ff0fc5/resourcegroups/DevOpsTestRG-A/providers/microsoft.insights/scheduledQueryRules/Unexpected shutdown?api-version=2018-04-16' was not found when performing the PATCH operation."
  }
}
Disable-LogAnalyticsAlertRule {
    param(
        [Parameter(Position = 0, mandatory = $true)]
        [string] $Rulename,
        [Parameter(Position = 1, mandatory = $true)]
        [string] $ResourceGroupName
    )

    $headers = Get-AccessTokenFromContext
    $cur_sub = (Get-AzureRmContext).Subscription.Id
    $ruleUri = "https://management.azure.com/subscriptions/$cur_sub/resourcegroups/$resourceGroupName/providers/microsoft.insights/scheduledQueryRules/$RuleName" + "?api-version=2018-04-16"
    $bodyEnable = "
{
    'properties': {
    'enabled': 'false'
    }
}
"
    Write-Verbose "ResourceURI being invoked: $ruleUri"
    try {
        $disablerule = Invoke-RestMethod -Method PATCH -Uri $ruleUri -Headers $headers -Body $bodyEnable
        $disablerule | Select-Object @{Name = "displayName"; Expression = { $_.properties.displayName } }, @{Name = "IsEnabled"; Expression = { $_.properties.enabled } }, @{Name = "lastUpdate"; Expression = { $_.properties.lastUpdatedTime } }, @{Name = "provisioningState"; Expression = { $_.properties.provisioningState } } | Format-Table -AutoSize -Wrap
        Write-Verbose "Output of Invoke-RestMethod: $disablerule"
    }
    catch {
        Write-Error "$_"
    }
}

person Dev Reddy    schedule 16.04.2019    source источник
comment
у вас есть место в названии ресурса? вам нужно заменить его чем-нибудь, например %20 или -?   -  person 4c74356b41    schedule 16.04.2019


Ответы (2)


Согласно сообщению об ошибке, я думаю, что комментарий правильный: вы должны убрать пробел в своем имени предупреждения с помощью% 20, URL-адрес выглядит следующим образом: https://management.azure.com/subscriptions/your_sub/resourcegroups/your_groupResource/sizes/microsoft.insights/scheduleQueryRules/Unexpected%20shutdown?api-version=2018-04-16

Вот быстрый способ предоставить правильный URL :

Наведите курсор на страницу rest api, нажмите на try it, а затем заполните всю необходимую информацию, тогда он автоматически сгенерирует правильный URL-адрес, который вы можете скопировать для использования в PowerShell:

введите здесь описание изображения

person Ivan Yang    schedule 17.04.2019
comment
Спасибо за быстрый ответ, который я пробовал с несколькими предупреждениями без пробелов, которые он работал при отключении или включении предупреждений приложения в поле зрения, где, что касается предупреждений аналитики журнала, он дает ошибку PatchResourceNotFound, - person Dev Reddy; 17.04.2019
comment
Я пробовал использовать лазурный портал, как показано на скриншоте, там также он работает для предупреждений о приложении, такая же ошибка для журналов, созданных с помощью аналитики журналов - person Dev Reddy; 17.04.2019
comment
когда я пытаюсь получить все правила предупреждений (включая логаналитику), я могу получить Get-LogAnalyticsAlertRule - person Dev Reddy; 17.04.2019
comment
@DevReddy, не могли бы вы обновить свой вопрос, указав, как вы создаете оповещение об аналитике журнала? несколько скриншотов было бы лучше. Я тестировал с моим предупреждением об аналитике журнала, ошибок нет. - person Ivan Yang; 17.04.2019
comment
ссылка ниже может быть полезной - person Dev Reddy; 17.04.2019
comment
@DevReddy, что ты имеешь в виду :)? - person Ivan Yang; 17.04.2019
comment
в настоящее время я могу бороться с двумя вещами из вышеупомянутого restapi, я могу включить или отключить только одно предупреждение за раз, но мое фактическое требование - отключить все предупреждения сразу в группе ресурсов - person Dev Reddy; 17.04.2019
comment
Другой - я создал оповещения через рабочее пространство аналитики журнала и информацию о приложении, с помощью приведенного ниже скрипта я могу отключить / отключить оповещения (Failrate 10, отмеченный зеленым на скриншоте ниже), которые создаются на основе аналитики приложения, при попытке того же сценария для отключить предупреждения, созданные в логаналитике, я получаю сообщение об ошибке (предупреждения, отмеченные красным на снимке экрана), я поделился ошибкой над кодом: PatchResourceNotFound, - person Dev Reddy; 17.04.2019
comment
он не может получить ресурс, поэтому его ресурс не найден. - person Dev Reddy; 17.04.2019
comment
@DevReddy, хорошо, я не знаю, что с тобой не так. Я не получал ошибок при срабатывании алерта аналитики логов. - person Ivan Yang; 18.04.2019

function Get-AccessTokenFromContext
    {
    try {
        $accesstoken = (New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient([Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile)).AcquireAccessToken((Get-AzureRmContext).Subscription.TenantId).AccessToken
        $buildheaders = @{
            'Authorization' = "Bearer $accesstoken"
            'Content-Type' = "application/json"
                    }
        return $buildheaders
        }
    catch
        {
            Write-Output "No context found! Please run 'Login-AzureRMAccount' to login to Azure"
            break
        }
    }   

function Get-LogAnalyticsAlertRule {param ($ cur_sub = 'YoursubID', $ resourceGroupName = 'RG name') $ headers = Get-AccessTokenFromContext $ cur_sub = (Get-AzureRmContext) .Subscription.Id $ ruleidURI = "https://management.azure.com/subscriptions/ $ cur_sub / sizes / microsoft.insights /duledQueryRules" + "? api -version = 2018-04-16 "$ sqrs = (Invoke-RestMethod -Method GET $ ruleidURI -Headers $ headers) .value # $ sqrs | Select-Object @ {Name = "DisplayName"; Expression = {$ .properties.displayname}}, @ {Name = "IsEnabled"; Expression = {$ .properties.enabled}}, @ { Name = "LastModified"; Expression = {$ .properties.lastUpdatedTime}}, @ {Name = "Workspace"; Expression = {[regex] :: Match ($ .properties.source.dataSourceId, "(?‹ = / Workspaces /) (. ) "). Value}}, @ {Name =" Resource Group "; Выражение = {[regex] :: Match ($ _. Properties.source.dataSourceId, "(?‹ = / ResourceGroups /) (.) (? = / Provider) "). Value}} | Формат-таблица $ sqrs | Select-Object name, @ {Name = "DisplayName"; Expression = {$ .properties.displayname}}, @ {Name = "IsEnabled"; Expression = {$ .properties.enabled}}, @ {Name = "Workspace"; Expression = {[regex] :: Match ($ .properties.source.dataSourceId, "(?‹ = / Workspaces /)(.*) "). Value}}, @ {Name = "Resource Group"; Expression = {[regex] :: Match ($ .properties.source.dataSourceId, "(?‹ = / ResourceGroups /)(.*)(?=/ provider) " ) .value}} | Формат-таблица -AutoSize -Wrap

    $sqrs_prop = $sqrs.properties

    $rule_name_list = $sqrs_prop.DisplayName
    foreach($rule_name in $rule_name_list){
        Write-Host "disabling $rule_name"
        if($rule_name -ne $null){

        $ruleUri = "https://management.azure.com/subscriptions/$cur_sub/resourcegroups/$resourceGroupName/providers/microsoft.insights/scheduledQueryRules/$rule_name"+"?api-version=2018-04-16"
         $bodyEnable = "
         {
             'properties': {
               'enabled': 'false'
             }
           }
         "
         Write-Verbose "ResourceURI being invoked: $ruleUri"

        try {
            $disablerule = Invoke-RestMethod -Method PATCH -Uri $ruleUri -Headers $headers -Body $bodyEnable
            $disablerule | Select-Object @{Name="displayName";Expression={$_.properties.displayName}}, @{Name="IsEnabled";Expression={$_.properties.enabled}},@{Name="lastUpdate";Expression={$_.properties.lastUpdatedTime}}, @{Name="provisioningState";Expression={$_.properties.provisioningState}} | Format-Table -AutoSize -Wrap
            Write-Verbose "Output of Invoke-RestMethod: $disablerule"
             }
          catch
             {
                Write-Error "$_"
             }
        }
    }
}

Get-LogAnalyticsAlertRule

person Dev Reddy    schedule 22.04.2019
comment
Я создал новое предупреждение журнала и могу включить или отключить с помощью вышеуказанного скрипта, и моя проблема решена, но я не могу выполнять какие-либо действия с предупреждениями, которые создаются во время возврата (предупреждения, созданные перед переносом рабочей области в LogAnalyticsAlertsNewAPI) после миграции не возможность выполнять какие-либо действия с этими предупреждениями, есть ли на это какие-либо ограничения? - person Dev Reddy; 22.04.2019
comment
@ Иван Ян, спасибо за помощь, до сих пор я нашел, кого именно я был заблокирован в эти дни, если мы попытаемся отключить / включить предупреждения, созданные перед переносом рабочего пространства в LogAnalyticsAlertsNewAPI, вы не сможете включить / включить миграцию предупреждений при попытке получить предупреждения логаналитики Вывод правила (Get-LogAnalyticsAlertRule), показывающий GUID для предупреждений, которые создаются перед миграцией, если мы создаем какое-либо новое предупреждение после миграции, не выдает никаких ошибок Ссылка PFA для снимка экрана ibb.co/tDLgcX8 - person Dev Reddy; 22.04.2019