Как проверить, включено ли резервное копирование на виртуальной машине Azure, используя PowerShell

Как проверить, включено ли резервное копирование на виртуальной машине Azure с помощью PowerShell?

Мне известно о запросе всех виртуальных машин и их сравнении с виртуальными машинами, настроенными в хранилище служб восстановления.

Есть ли способ вытащить информацию из объекта Виртуальная машина? ИЛИ более простой способ, чем у меня уже есть?

3 ответа

Решение

Используйте командлет Get-AzureRmRecoveryServicesBackupContainer и передайте его командлету Get-AzureRmRecoveryServicesBackupItem, чтобы отобразить виртуальные машины с поддержкой резервного копирования в хранилище служб восстановления.

Для получения дополнительной информации см.: https://docs.microsoft.com/en-us/azure/backup/backup-azure-vms-automation

#change the below values
$ResourceGroupName= "spfarm" #all the VMs in this Resource Group will be checked for Vault specified below
$VaultName = "vault595" 

Get-AzureRmRecoveryServicesVault -Name $VaultName -ResourceGroupName $ResourceGroupName | Set-AzureRmRecoveryServicesVaultContext
$fnames = Get-AzureRmRecoveryServicesBackupContainer -ContainerType "AzureVM" -Status "Registered" | select  -ExpandProperty friendlyname
$vaultVMs=@()
foreach ($name in $fnames)
{
    $nameContainer = Get-AzureRmRecoveryServicesBackupContainer -ContainerType "AzureVM" -Status "Registered" -FriendlyName $name
    $vaultVMs += Get-AzureRmRecoveryServicesBackupItem -Container $nameContainer -WorkloadType "AzureVM" | select VirtualMachineId
}

 $vms = Get-AzureRmVM -ResourceGroupName $ResourceGroupName
 foreach ($vm in $vms)
 {
    $j = 0;
    for ($i=0; $i -lt $vaultVMs.Count; $i++)
    {
        if ($vm.id -eq $vaultVMs[$i].VirtualMachineId)
        {
               $j++
        }
    }
    if ($j -eq 0)
    {
        Write-Host "$($vm.name) is not backed up in this vault"
    }
    else
    {
        Write-Host "$($vm.Name) is backed up in this vault"
    }
 }

      param (
    [Parameter(Mandatory=$true)][string]$tenantId
)

Connect-AzAccount -Tenant $tenantId
$subscriptions = @(Get-AzSubscription -TenantId $tenantId)

foreach ($subscription in $subscriptions)
{
    Set-AzContext -Subscription $subscription -Tenant $tenantId | Out-null

    $vaults = Get-AzRecoveryServicesVault
    [System.Collections.ArrayList]$vms = @(Get-AzVM)
    foreach ($vault in $vaults)
    {
        Set-AzRecoveryServicesVaultContext -Vault $vault
        $containers = Get-AzRecoveryServicesBackupContainer -ContainerType "AzureVM" -Status "Registered"
        
        $vaultVMs=@()
        foreach ($container in $containers) # Fetch all backed-up VMs in the iterated vault
        {
            $vaultVMs += Get-AzRecoveryServicesBackupItem -Container $container -WorkloadType "AzureVM" | Select-Object VirtualMachineId
        }

        foreach ($vaultVM in $vaultVMs) # Remove the backed-up VMs from the array containing all the VMs in the iterated subscription
        {
            $indexsToRemove = @()
            for ($i=$vms.Count-1; $i -ge 0; $i--)
            {
                if ($vaultVM.VirtualMachineId -eq $vms[$i].id)
                {
                    $indexsToRemove += $i
                }
            }

            foreach ($indexToRemove in $indexsToRemove) {
                $vms.RemoveAt($indexToRemove)
            }
        }
    }

    if($vms.Count -gt 0) 
    {
        Write-Host "### SUBSCRIPTION $($subscription.Name) ###"
    }

    foreach ($vm in $vms) # Print out the VM names which are not backed up in the iterated subscription
    {
        Write-Host "$($vm.name) is not backed up"
    }

    if($vms.Count -gt 0) 
    {
        Write-Host ""
    }
}

Я внес некоторые улучшения в сценарий в , что его более надежным, но также более подходящим для ответе Абхилашаварианта использованиясделало , над которым я работаю. Эти улучшения:

  • Теперь в область действия входят все подписки и все группы ресурсов для определенного клиента. Идентификатор этого арендатора является параметром скрипта.
  • Удален избыточный вызов Get-AzureRmRecoveryServicesBackupContainer
  • При обнаружении совпадения между массивом, содержащим все виртуальные машины (), и массивом, содержащим виртуальные машины, резервные копии которых сохраняются в хранилищах восстановления ( ), первый массив обновляется, что позволяет избежать лишних итераций при повторении $vms
Другие вопросы по тегам