Azure Webhook получить статус виртуальной машины

Я пытаюсь сделать 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."
}

1 ответ

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

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

У меня есть 2 подписки, и Get-AzureRmVM возвращает 2 vms только потому, что остальные классические. Учетная запись автоматизации, в которой я создал этот 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.Для классической ВМ нам нужно использовать лазурь ASM powershell module команда, вы могли бы попробовать Get-AzureVM может быть Example 3: Display a table of virtual machine statuses по той ссылке поможет.

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

Рекомендации:

Другие вопросы по тегам