Можно ли программно получить идентификатор хранилища ASR Vault, Fabri c и имя контейнера из виртуальной машины Azure? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь отключить Azure Защита восстановления сайта с Azure ВМ через Azure Powershell (модуль Az). Идея состоит в том, чтобы получить виртуальную машину, используя имя и группу ресурсов:

Get-AzVM -Name $name -ResourceGroupName $rgName

, а затем отключить защиту, используя любые связывающие данные, которые соединяют виртуальную машину с защищенным элементом ASR.

Согласно Насколько я понимаю, это можно сделать с помощью следующего командлета:

Remove-AzRecoveryServicesAsrReplicationProtectedItem

Для этого командлета требуется объект защищенного элемента репликации:

Get-AzRecoveryServicesAsrReplicationProtectedItem

Для которого требуется Контейнер защиты который, в свою очередь, требует Fabri c, который, наконец, требует Vault.

Конечно, я могу получить эти параметры и объекты, если я знаю их заранее. Но это противоречило бы цели создания сценария, который разрешает их программно, используя Azure Имя виртуальной машины и RG.

Я не могу найти какой-либо способ связать или получить эту информацию из Azure Объект VM ...

Мне пришлось разрешить несколько похожую ситуацию с резервными копиями, и я достиг этого, используя:

Get-AzRecoveryServicesBackupStatus -Name $vmname -ResourceGroupName $rg -Type "AzureVM"

$container = (Get-AzRecoveryServicesBackupContainer -ContainerType "AzureVM" -Status "Registered" -VaultId $VaultID | where-object {$_.FriendlyName -eq $vmname -and $_.ResourceGroupName -eq $rg})

Но я не могу найти ни один командлет, похожий на тот, который будет принимать объект VM или, по крайней мере, имя VM и имя RG в качестве параметров ...

  1. Можно ли это сделать?
  2. Как портал связывает виртуальную машину и элемент ASR при выборе аварийного восстановления на панели мониторинга виртуальной машины?

1 Ответ

0 голосов
/ 13 марта 2020

К сожалению, прямого подхода к этому нет. Я сообщил об этом в Azure -Powershell Github.

Тем временем, решение, которое я нашел, это:

  1. L oop через каждое отдельное хранилище служб восстановления
  2. Затем через каждый Фабри c
  3. Затем через каждый Контейнер
  4. Затем найдите имя ProtectedItem.FriendlyName, соответствующее вашему имени виртуальной машины

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

foreach ($Vault in $Vaults) 
    {
        Set-AzRecoveryServicesAsrVaultContext -Vault $Vault -InformationAction SilentlyContinue
        $Fabrics = Get-AzRecoveryServicesAsrFabric
            foreach ($Fabric in $Fabrics){
                $drContainers = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $Fabric
                    foreach ($drContainer in $drContainers){
                        $protectedItem = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $drContainer -FriendlyName $vm.Name -ErrorAction SilentlyContinue
                        if ($null -ne $protectedItem){
                            return $protectedItem
                        }

                    }
            }
    }
...