Веб-перехватчик Azure получает статус виртуальной машины

Я пытаюсь создать модуль Runbook / webhook, который возвращает состояние машины. Что я наконец замечаю, так это то, что

Get-AzureRmVM

возвращает только 2 группы ресурсов. Где

Get-AzureRmResource

Возвращает еще много, но не все снова! Я уверен насчет своего имени группы ресурсов, но все же в нем говорится, что группа ресурсов «groupName» не может быть найдена. когда я пытаюсь запустить с определенным именем

 Get-AzureRmVM -ResourceGroupName groupName

В то время как мой другой модуль Runbook для запуска и остановки работает нормально, я запутался, я не вижу разницы между группами.

PS: я использую Azure Run As Connection

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

    $vms = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)

    Write-Output "Authenticating to Azure with service principal and certificate"
    $ConnectionAssetName = "AzureRunAsConnection"
    Write-Output "Get connection asset: $ConnectionAssetName" 

    $Conn = Get-AutomationConnection -Name $ConnectionAssetName
            if ($Conn -eq $null)
            {
                throw "Could not retrieve connection asset: $ConnectionAssetName. Check that this asset exists in the Automation account."
            }
            Write-Output "Authenticating to Azure with service principal." 
            Add-AzureRmAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint | Write-Output

        # Start each virtual machine
        foreach ($vm in $vms)
        {
            $vmName = $vm.Name
            Write-Output "Checking $vmName"

            $vmstatus = Get-AzureRmVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroup -Status# | Select-Object -ExpandProperty StatusesText | ConvertFrom-Json

            #select code index and convert to $vmpowerstate
            $vmPowerState = $vmstatus#[1].Code
            #Write-Output "Resource Group: $vmResourceGroupName", ("VM Name: " + $VM.Name), "Status: $VMStatusDetail" `n
            Write-Output ("VM Name: " + $vmName), "Status: $vmPowerState" `n
        }
}
else {
    write-Error "This is webhook only."
}

person et3rnal    schedule 09.11.2018    source источник
comment
Находятся ли группы в одной подписке?   -  person Joy Wang    schedule 09.11.2018
comment
Спасибо, что указали на это, у меня есть 2 подписки, и Get-AzureRmVM возвращает 2 виртуальных машины только потому, что остальные - классика. Учетная запись автоматизации, в которой я создал этот модуль Runbook, является другой, и я вижу это в обзоре? это то же самое, что я использую для запуска / остановки машин в другой подписке!   -  person et3rnal    schedule 09.11.2018
comment
Извините, но это еще не решено. Спасибо, что указали на различные подписки, которые я полностью пропустил. Я все еще не могу получить хук, чтобы вернуть статус: \   -  person et3rnal    schedule 13.11.2018
comment
Я полагаю, ты хочешь получить PowerState в конце концов? Если да, вы можете проверить обновление в моем ответе, если я неправильно понял, также дайте мне знать.   -  person Joy Wang    schedule 13.11.2018


Ответы (1)


Потому что ваши группы ресурсов находятся в разных подписках.

Как упоминалось в @ et3rnal,

У меня 2 подписки, и Get-AzureRmVM возвращает 2 виртуальных машины только потому, что остальные - классика. Учетная запись автоматизации, в которой я создал этот модуль Runbook, является другой, и я вижу это в обзоре? это то же самое, что я использую для запуска / остановки машин в другой подписке!

Обновление:

Если вы хотите получить PowerState виртуальной машины, вы можете попробовать команду ниже, в вашем случае просто поместите ее в цикл, $PowerState - это PowerState.

$status = Get-AzureRmVM -Name <VM Name> -ResourceGroupName <Resource Group Name> -Status
$PowerState = ($status.Statuses | Where-Object {$_.Code -like "PowerState/*"}).DisplayStatus

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

Обновление2:

1. Для классической виртуальной машины нам нужно использовать команду azure ASM powershell module, вы можете попробовать _ 5_, возможно, Example 3: Display a table of virtual machine statuses в этой ссылке поможет.

2. Другой вариант - перенести классическую виртуальную машину (ASM) на ARM, а затем использовать команду ARM Get-AzureRmVM.

Использованная литература:

person Joy Wang    schedule 09.11.2018
comment
Это не сработает ни для классической виртуальной машины, ни если она находится в другой подписке. Идея состоит в том, чтобы иметь веб-перехватчик, который может возвращать статус, принимая только имя виртуальной машины. Я не против передать более подробную информацию, но, похоже, я не могу найти команду для этого. Думаю, мне лучше забыть об идее веб-перехватчика и вместо этого использовать API. - person et3rnal; 14.11.2018
comment
@ et3rnal См. мой Update2, надеюсь, он вам поможет. - person Joy Wang; 14.11.2018