Поделиться через


Изменение набора доступности для виртуальной машины с помощью Azure PowerShell

Область применения: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows

Ниже описано, как изменить группу доступности виртуальной машины с помощью Azure PowerShell. Виртуальную машину можно добавить в группу доступности только при создании виртуальной машины. Чтобы изменить группу доступности, необходимо удалить и повторно создать виртуальную машину.

Эта статья была проверена 12 февраля 2019 г. с помощью Azure Cloud Shell и модуля Az PowerShell версии 1.2.0.

Предупреждение

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

Убедитесь в том, что для параметра delete дисков задано значение detach. Если они заданы delete, обновите виртуальные машины перед удалением виртуальных машин.

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

После завершения этого процесса может потребоваться также переустановить некоторые расширения.

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

Необходимые компоненты

нет

Изменение группы доступности

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

  # Set variables
      $resourceGroup = "myResourceGroup"
      $vmName = "myVM"
      $newAvailSetName = "myAvailabilitySet"

  # Get the details of the VM to be moved to the availability set
      $originalVM = Get-AzVM `
        -ResourceGroupName $resourceGroup `
        -Name $vmName

  # Create a new availability set if it doesn't exist
      $availSet = Get-AzAvailabilitySet `
        -ResourceGroupName $resourceGroup `
        -Name $newAvailSetName `
        -ErrorAction Ignore
      if (-Not $availSet) {
      $availSet = New-AzAvailabilitySet `
        -Location $originalVM.Location `
        -Name $newAvailSetName `
        -ResourceGroupName $resourceGroup `
        -PlatformFaultDomainCount 2 `
        -PlatformUpdateDomainCount 2 `
        -Sku Aligned
      }

  # Remove the original VM
      Remove-AzVM -ResourceGroupName $resourceGroup -Name $vmName

  # Create the basic configuration for the replacement VM.
      $newVM = New-AzVMConfig `
        -VMName $originalVM.Name `
        -VMSize $originalVM.HardwareProfile.VmSize `
        -AvailabilitySetId $availSet.Id
  
  # For a Linux VM, change the last parameter from -Windows to -Linux
      Set-AzVMOSDisk `
        -VM $newVM -CreateOption Attach `
        -ManagedDiskId $originalVM.StorageProfile.OsDisk.ManagedDisk.Id `
        -Name $originalVM.StorageProfile.OsDisk.Name `
        -Windows

  # Add data disks
      foreach ($disk in $originalVM.StorageProfile.DataDisks) { 
      Add-AzVMDataDisk -VM $newVM `
        -Name $disk.Name `
        -ManagedDiskId $disk.ManagedDisk.Id `
        -Caching $disk.Caching `
        -Lun $disk.Lun `
        -DiskSizeInGB $disk.DiskSizeGB `
        -CreateOption Attach
      }
      
  # Add NICs and keep the same NICs as primary; keep the private IP too, if it exists
      foreach ($nic in $originalVM.NetworkProfile.NetworkInterfaces) {	
      if ($nic.Primary -eq "True")
      {
              Add-AzVMNetworkInterface `
                -VM $newVM `
                -Id $nic.Id -Primary
                }
            else
                {
                  Add-AzVMNetworkInterface `
                  -VM $newVM `
                  -Id $nic.Id 
                  }
        }

  # Re-create the VM
      New-AzVM `
        -ResourceGroupName $resourceGroup `
        -Location $originalVM.Location `
        -VM $newVM `
        -DisableBginfoExtension