Список всех выполняемых веб-заданий в подписке azure с помощью powershell

У меня есть подписка azure, которая имеет более 200 appServices, где около половины из них имеют непрерывный, всегда на WebJobs прилагается, некоторые также имеют слоты, которые также имеют webJobs.

Есть ли способ перечислить все веб-задания, которые находятся в подписке? Я изначально пытался использовать powershell для этого, но это было довольно сложно, и мне было интересно, знал ли кто-нибудь о простом способе достижения вышеуказанного.

Кажется, что Get-AzureRmWebApp должен быть в состоянии помочь, но я не могу найти способ, чтобы перечислить рабочие места, которые находятся внутри веб-приложений.

2 ответа

  1. Вы можете сделать это через API ARM, хотя вам все еще нужно вызвать его в каждом веб-приложении.

    Вы можете получить WebJobs с GET запрос на:

    https://management.azure.com/subscriptions/subscription-id/resourceGroups/resource-group-name/providers/Microsoft.Web/sites/app-name/webjobs?api-version=2016-03-01
    

    Но я сомневаюсь, что это будет более эффективно, чем то, что у вас есть, так как вам все еще нужно сделать звонок для каждого веб-приложения. И вам нужно будет получить маркер доступа каким-то образом.

    Веб-задания являются свойством приложений службы приложений и не могут быть запрошены сразу из Azure.

  2. Я нашел команду Get-AzureWebsiteJob, которой нет в семействе командлетов AzureRM. Следующий сценарий может получить данные, которые я ищу:

    $groups = get-AzureRmResourceGroup | where{$_.ResourceGroupName -like "*-prod-*"}
    
    foreach($group in $groups){
        Write-Host -ForegroundColor Cyan "processing resourceGroup" $group.ResourceGroupName
    
        $webApps = Get-AzureRmWebApp -ResourceGroupName $group.ResourceGroupName
    
        foreach($webApp in $webApps){
            write-host -ForegroundColor Yellow $webApp.Name        
            $job = Get-AzureWebsiteJob -Name $webApp.Name
            if($job){ 
                write-host -ForegroundColor DarkYellow $job.JobName
            }        
            $job = Get-AzureWebsiteJob -Name $webApp.Name -Slot staging
            if($job){
                write-host -ForegroundColor DarkYellow $job.JobName " -staging"
            }
        }
    }
    

    Выше не отфильтровывает работающие из остановленных, но это может быть легко добавлено, если нужно.

    Конечно, сначала необходимо войти в AzureRM и Azure classic

    Login-AzureRmAccount
    Select-AzureRmSubscription -SubscriptionId <<mySubscriptionId>>
    Get-AzureRmContext
    
    Add-AzureAccount
    Select-AzureSubscription -SubscriptionId <<mySubscriptionId>>
    Get-AzureSubscription -Current
    

    Its a very slow script iterating over this number or AppServices though. Любые идеи по его ускорению будут оценены.