PowerShell рд╡рд╛рдкрд░реВрди Azure VM рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рдгреЗ рдЖрдгрд┐ рд╣рдЯрд╡рдгреЗ

рдкреЙрд╡рд░рд╢реЗрд▓ рд╡рд╛рдкрд░реВрди, рдЕрднрд┐рдпрдВрддреЗ рдЖрдгрд┐ рдЖрдпрдЯреА рдкреНрд░рд╢рд╛рд╕рдХ рдХреЗрд╡рд│ рдСрди-рдкреНрд░рд┐рдорд╛рдЗрд╕реЗрд╕рдЪ рдирд╡реНрд╣реЗ рддрд░ рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░рд╕рд╣, рд╡рд┐рд╢реЗрд╖рддрдГ Azure рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдирд╛ рд╡рд┐рд╡рд┐рдз рдХрд╛рд░реНрдпреЗ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рддрд╛рдд. рдХрд╛рд╣реА рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, Azure рдкреЛрд░реНрдЯрд▓рджреНрд╡рд╛рд░реЗ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ PowerShell рджреНрд╡рд╛рд░реЗ рдХрд╛рдо рдХрд░рдгреЗ рдЕрдзрд┐рдХ рд╕реЛрдпреАрдЪреЗ рдЖрдгрд┐ рдЬрд▓рдж рдЕрд╕рддреЗ. рддреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд░реЙрд╕-рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╕реНрд╡рд░реВрдкрд╛рдореБрд│реЗ, рдкреЙрд╡рд░рд╢реЗрд▓ рдХреЛрдгрддреНрдпрд╛рд╣реА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

рддреБрдореНрд╣реА Ubuntu, Red Hat рдХрд┐рдВрд╡рд╛ Windows рдЪрд╛рд▓рд╡рдд рдЕрд╕рд▓рд╛рдд рддрд░реАрд╣реА, PowerShell рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреА рдХреНрд▓рд╛рдЙрдб рд╕рдВрд╕рд╛рдзрдиреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░реВ рд╢рдХрддреЗ. рдореЙрдбреНрдпреВрд▓ рд╡рд╛рдкрд░рдгреЗ Azure PowerShell, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдкрдг рдЖрднрд╛рд╕реА рдорд╢реАрдирдЪреЗ рдХреЛрдгрддреЗрд╣реА рдЧреБрдгрдзрд░реНрдо рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛.

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА Azure рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ VM рдЪрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА, рддрд╕реЗрдЪ VM рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣рдЯрд╡рдгреНрдпрд╛рд╕рд╛рдареА PowerShell рдХрд╕реЗ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ рддреЗ рдкрд╛рд╣реВ.

PowerShell рд╡рд╛рдкрд░реВрди Azure VM рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рдгреЗ рдЖрдгрд┐ рд╣рдЯрд╡рдгреЗ

рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ! рдХрд╛рдорд╛рдЪреНрдпрд╛ рддрдпрд╛рд░реАрд╕рд╛рдареА рд╕реЕрдирд┐рдЯрд╛рдпрдЭрд░рдиреЗ рд╣рд╛рдд рдкреБрд╕рдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░реВ рдирдХрд╛:

  • рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдореЙрдбреНрдпреВрд▓рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓ Azure PowerShell рдореЙрдбреНрдпреВрд▓ - рдХрдорд╛рдВрдбрд╕рд╣ рдкреЙрд╡рд░рд╢реЗрд▓ рдЧреЕрд▓рд░реАрдордзреВрди рддреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ Install-Module Az.
  • рддреБрдореНрд╣рд╛рд▓рд╛ Azure рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ рдСрдереЗрдВрдЯрд┐рдХреЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗрдереЗ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡реВрди рдЪрд╛рд▓реВ рдЖрд╣реЗ Connect-AzAccount.

рдкреНрд░рдердо, рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ рдЬреА Azure VM рдЪреЗ рдЖрдХрд╛рд░ рдмрджрд▓реЗрд▓. рдЪрд▓рд╛ рд╡реНрд╣реАрдПрд╕ рдХреЛрдб рдЙрдШрдбреВ рдЖрдгрд┐ рдирд╡реАрди рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрд╡реНрд╣ рдХрд░реВ рдЖрдХрд╛рд░ рдмрджрд▓рд╛-AzVirtualMachine.ps1 тАФ рдЬрд╕реЗ рдЬрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкреБрдвреЗ рдЬрд╛рдИрд▓ рддрд╕рддрд╕реЗ рдЖрдореНрд╣реА рддреНрдпрд╛рдд рдХреЛрдбрдЪреЗ рддреБрдХрдбреЗ рдЬреЛрдбреВ.

рдЖрдореНрд╣реА рдЙрдкрд▓рдмреНрдз VM рдЖрдХрд╛рд░рд╛рдВрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ

рддреБрдореНрд╣реА VM рдЖрдХрд╛рд░ рдмрджрд▓рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣рд╛рд▓рд╛ Azure рдХреНрд▓рд╛рдЙрдбрдордзреАрд▓ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╕рд╛рдареА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрдХрд╛рд░ рдХреЛрдгрддреЗ рдЖрд╣реЗрдд рд╣реЗ рд╢реЛрдзрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛рд╡реА рд▓рд╛рдЧреЗрд▓ Get-AzVMSize.

рддрд░ рдЖрднрд╛рд╕реА рдорд╢реАрдирд╕рд╛рдареА devvm01 рд╕рдВрд╕рд╛рдзрди рдЧрдЯрд╛рдХрдбреВрди рджреЗрд╡ рдЖрдореНрд╣реА рд╕рд░реНрд╡ рд╢рдХреНрдп рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрдХрд╛рд░рд╛рдВрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдВрдордзреНрдпреЗ, рдЕрд░реНрдерд╛рддрдЪ, рддреНрдпрд╛рдРрд╡рдЬреА ResourceGroupName=dev ╨╕ VMName=devvm01 рдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╛рдареА рддреБрдореНрд╣реА рддреБрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдореВрд▓реНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛рд▓.)

рдХрдорд╛рдВрдб рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдкрд░рдд рдХрд░реЗрд▓:

PowerShell рд╡рд╛рдкрд░реВрди Azure VM рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рдгреЗ рдЖрдгрд┐ рд╣рдЯрд╡рдгреЗ

рд╣реЗ рд╕рд░реНрд╡ рд╕рдВрднрд╛рд╡реНрдп рдЖрдХрд╛рд░рд╛рдЪреЗ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд рдЬреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирд╕рд╛рдареА рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЪрд▓рд╛ рдХрд╛рд░рдЪрд╛ рдЖрдХрд╛рд░ рдмрджрд▓реВрдпрд╛

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣реА рдирд╡реАрди рдЖрдХрд╛рд░рд╛рдд рдЖрдХрд╛рд░ рдмрджрд▓реВ рдорд╛рдирдХ_B1ls - рддреЛ рд╡рд░реАрд▓ рдпрд╛рджреАрдд рдкрд╣рд┐рд▓реНрдпрд╛ рд╕реНрдерд╛рдирд╛рд╡рд░ рдЖрд╣реЗ. (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирд╛рддреАрд▓ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдордзреНрдпреЗ, рдЕрд░реНрдерд╛рддрдЪ, рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓рд╛ рдЖрдХрд╛рд░ рддреБрдореНрд╣реА рдирд┐рд╡рдбрддрд╛.)

  1. рдкреНрд░рдердо рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рд╛ Get-AzVM рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА (рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди) рдорд╛рд╣рд┐рддреА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд╕рд╛рдард╡реВрди рдорд┐рд│рд╡рддреЛ $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. рдордЧ рдЖрдкрдг рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдордзреВрди рдЧреБрдгрдзрд░реНрдо рдШреЗрддреЛ .HardwareProfile.VmSize рдЖрдгрд┐ рдЗрдЪреНрдЫрд┐рдд рдирд╡реАрди рдореВрд▓реНрдп рд╕реЗрдЯ рдХрд░рд╛:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. рдЖрдгрд┐ рдЖрддрд╛ рдЖрдореНрд╣реА рдлрдХреНрдд VM рдЕрдкрдбреЗрдЯ рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЛ - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. рдЖрдореНрд╣реА рдЦрд╛рддреНрд░реА рдХрд░рддреЛ рдХреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЭрд╛рд▓реЗ рдЖрд╣реЗ - рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ рдЖрдордЪреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреАрдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЛ рдЖрдгрд┐ рдорд╛рд▓рдорддреНрддреЗрдХрдбреЗ рдкрд╛рд╣рддреЛ $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

рддрд┐рдердВ рдкрд╛рд╣рд┐рд▓рдВ рддрд░ рдорд╛рдирдХ_B1ls - рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╕рд░реНрд╡рдХрд╛рд╣реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЖрд╣реЗ, рдХрд╛рд░рдЪрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рд▓рд╛ рдЖрд╣реЗ. рддреБрдореНрд╣реА рдЖрдгрдЦреА рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрддрд╛ рдЖрдгрд┐ рдЕреЕрд░реЗ рд╡рд╛рдкрд░реВрди рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рд╡реНрд╣реАрдПрдордЪрд╛ рдЖрдХрд╛рд░ рдмрджрд▓реВрди рддреБрдордЪреЗ рдпрд╢ рд╡рд╛рдврд╡реВ рд╢рдХрддрд╛.

Azure рдордзреАрд▓ VM рд╣рдЯрд╡рдгреНрдпрд╛рдмрджреНрджрд▓ рдХрд╛рдп?

рд╣рдЯрд╡рд▓реНрдпрд╛рдирдВрддрд░, рд╕рд░реНрд╡рдХрд╛рд╣реА рджрд┐рд╕рддреЗ рддрд┐рддрдХреЗ рд╕реЛрдкреЗ рдЖрдгрд┐ рд╕рд░рд│ рдирд╕рддреЗ. рд╢реЗрд╡рдЯреА, рдпрд╛ рдорд╢реАрдирд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреЗрдХ рд╕рдВрд╕рд╛рдзрдиреЗ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдпрд╛рд╕рд╣:

  • рдмреВрдЯ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рд╕реНрдЯреЛрд░реЗрдЬ рдХрдВрдЯреЗрдирд░
  • рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IP рдкрддреНрддреЗ
  • рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХ рдЖрдгрд┐ рдмреНрд▓реЙрдм рдЬрд┐рдереЗ рддреНрдпрд╛рдЪреА рд╕реНрдерд┐рддреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ
  • рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд╕

рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рдПрдХ рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░реВ рдЖрдгрд┐ рддреНрдпрд╛рд╕ рдХреЙрд▓ рдХрд░реВ Remove-AzrVirtualMachine - рдЖрдгрд┐ рддреЗ рдХреЗрд╡рд│ Azure VMрдЪ рдирд╛рд╣реА рддрд░ рд╡рд░реАрд▓ рд╕рд░реНрд╡ рд╣рдЯрд╡реЗрд▓.

рдЖрдореНрд╣реА рдорд╛рдирдХ рдорд╛рд░реНрдЧрд╛рдиреЗ рдЬрд╛рддреЛ рдЖрдгрд┐ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рдкреНрд░рдердо рдЖрдордЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ (VM) рдорд┐рд│рд╡рддреЛ Get-AzVm. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреА рдПрдХ рдХрд╛рд░ рдЕрд╕реВ рджреНрдпрд╛ WINSRV19 рд╕рдВрд╕рд╛рдзрди рдЧрдЯрд╛рдХрдбреВрди MyTestVMs.

рдЪрд▓рд╛ рд╣рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдЧреБрдгрдзрд░реНрдорд╛рдВрд╕рд╣ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░реВрдпрд╛ $vm:

$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs

рдмреВрдЯ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдлрд╛рдЗрд▓реНрд╕рд╕рд╣ рдХрдВрдЯреЗрдирд░ рдХрд╛рдврдд рдЖрд╣реЗ

Azure рдордзреНрдпреЗ VM рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдмреВрдЯ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ (рдмреВрдЯ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХрдВрдЯреЗрдирд░) рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрдВрдЯреЗрдирд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рджреЗрдЦреАрд▓ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЬрд╛рддреЗ, рдЬреЗрдгреЗрдХрд░реВрди рдмреВрдЯ рдХрд░рддрд╛рдирд╛ рд╕рдорд╕реНрдпрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рд╕рдорд╕реНрдпрд╛рдирд┐рд╡рд╛рд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд╣реАрддрд░реА рдЪрд╛рд▓реВ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рддрдерд╛рдкрд┐, рдЬреЗрд╡реНрд╣рд╛ рд╡реНрд╣реАрдПрдо рд╣рдЯрд╡рд┐рд▓рд╛ рдЬрд╛рддреЛ, рддреЗрд╡реНрд╣рд╛ рд╣реЗ рдХрдВрдЯреЗрдирд░ рддреНрдпрд╛рдЪреЗ рдЖрддрд╛рдЪреЗ рдирд┐рд░рд░реНрдердХ рдЕрд╕реНрддрд┐рддреНрд╡ рдЪрд╛рд▓реВ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЛрдбрд▓реЗ рдЬрд╛рддреЗ. рдЪрд▓рд╛ рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреА рджреБрд░реБрд╕реНрдд рдХрд░реВрдпрд╛.

  1. рдкреНрд░рдердо, рд╣рд╛ рдХрдВрдЯреЗрдирд░ рдХреЛрдгрддреНрдпрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЦрд╛рддреНрдпрд╛рдЪрд╛ рдЖрд╣реЗ рддреЗ рд╢реЛрдзреВ рдпрд╛ - рдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рдорд╛рд▓рдорддреНрддрд╛ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ storageUri рд╡рд╕реНрддреВрдЪреНрдпрд╛ рдЖрддрдбреНрдпрд╛рдВрдордзреНрдпреЗ DiagnosticsProfile рдЖрдордЪреЗ VM. рдпрд╛рд╕рд╛рдареА рдореА рд╣рд╛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддреА рд╡рд╛рдкрд░рддреЛ:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдВрдЯреЗрдирд░рдЪреЗ рдирд╛рд╡ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рд╡реНрд╣реАрдПрдо рдЖрдпрдбреА рдорд┐рд│рд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ Get-AzResource:
    
    if ($vm.Name.Length -gt 9) {
        $i = 9
    } else {
        $i = $vm.Name.Length - 1
    }
     
    $azResourceParams = @{
        'ResourceName' = WINSRV
        'ResourceType' = 'Microsoft.Compute/virtualMachines'
        'ResourceGroupName' = MyTestVMs
    }
     
    $vmResource = Get-AzResource @azResourceParams
    $vmId = $vmResource.Properties.VmId
    $diagContainerName = ('bootdiagnostics-{0}-{1}' -f $vm.Name.ToLower().Substring(0, $i), $vmId)
    
  3. рдкреБрдвреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрд╕рд╛рдзрди рдЧрдЯрд╛рдЪреЗ рдирд╛рд╡ рдорд┐рд│реЗрд▓ рдЬреНрдпрд╛рдЪрд╛ рдХрдВрдЯреЗрдирд░ рдЖрд╣реЗ:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. рдЖрдгрд┐ рдЖрддрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХрдорд╛рдВрдбрд╕рд╣ рдХрдВрдЯреЗрдирд░ рд╣рдЯрд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЖрд╣реЗ Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM рдХрд╛рдврдд рдЖрд╣реЗ

рдЖрддрд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдЪ рдбрд┐рд▓реАрдЯ рдХрд░реВ, рдХрд╛рд░рдг рдЖрдкрдг рдЖрдзреАрдЪ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ $vm рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯрд╕рд╛рдареА. рдмрд░рдВ, рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡реВрдпрд╛ Remove-AzVm:

$null = $vm | Remove-AzVM -Force

рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрдгрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IP рдкрддреНрддрд╛ рдХрд╛рдвреВрди рдЯрд╛рдХрдд рдЖрд╣реЗ

рдЖрдордЪреНрдпрд╛ VM рдХрдбреЗ рдЕрдЬреВрдирд╣реА рдПрдХ (рдХрд┐рдВрд╡рд╛ рдЕрдиреЗрдХ) рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ (NICs) рдЖрд╣реЗрдд - рддреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдореНрд╣рдгреВрди рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рд╕рд╛рдареА, рдЪрд▓рд╛ рдЧреБрдгрдзрд░реНрдо рдкрд╛рд╣реВрдпрд╛ NetworkInterfaces рдЖрдордЪреЗ рд╡реНрд╣реАрдПрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдгрд┐ рдХрдорд╛рдВрдбрд╕рд╣ рдПрдирдЖрдпрд╕реА рд╣рдЯрд╡рд╛ Remove-AzNetworkInterface. рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рд▓реВрдк рд╡рд╛рдкрд░рддреЛ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдкреНрд░рддреНрдпреЗрдХ NIC рд╕рд╛рдареА рдЖрдореНрд╣реА рдорд╛рд▓рдорддреНрддрд╛ рддрдкрд╛рд╕реВ IpConfiguration рдЗрдВрдЯрд░рдлреЗрд╕рдЪрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IP рдкрддреНрддрд╛ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдЬрд░ рдПрдЦрд╛рджрд╛ рд╕рд╛рдкрдбрд▓рд╛, рддрд░ рдЖрдореНрд╣реА рдХрдорд╛рдВрдбрд╕рд╣ рдХрд╛рдвреВрди рдЯрд╛рдХреВ Remove-AzPublicIpAddress.

рдпреЗрдереЗ рдлрдХреНрдд рдЕрд╢рд╛рдЪ рдХреЛрдбрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ, рдЬрд┐рдереЗ рдЖрдкрдг рд╕рд░реНрд╡ NICs рд▓реВрдкрдордзреНрдпреЗ рдкрд╛рд╣рддреЛ, рддреЗ рд╣рдЯрд╡рддреЛ рдЖрдгрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IP рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЛ. рдЕрд╕реЗрд▓ рддрд░ рдорд╛рд▓рдорддреНрддреЗрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рд╛ PublicIpAddress, рдЖрдпрдбреАрджреНрд╡рд╛рд░реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрдирд╛рдЪреЗ рдирд╛рд╡ рд╢реЛрдзрд╛ рдЖрдгрд┐ рддреЗ рд╣рдЯрд╡рд╛:


foreach($nicUri in $vm.NetworkProfile.NetworkInterfaces.Id) {
    $nic = Get-AzNetworkInterface -ResourceGroupName $vm.ResourceGroupName -Name $nicUri.Split('/')[-1]
    Remove-AzNetworkInterface -Name $nic.Name -ResourceGroupName $vm.ResourceGroupName -Force

    foreach($ipConfig in $nic.IpConfigurations) {
        if($ipConfig.PublicIpAddress -ne $null) {
            Remove-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('/')[-1] -Force
        }
    }
}

рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХ рдХрд╛рдвреВрди рдЯрд╛рдХрдд рдЖрд╣реЗ

рдУрдПрд╕ рдбрд┐рд╕реНрдХ рдПрдХ рдмреНрд▓реЙрдм рдЖрд╣реЗ, рдЬреНрдпрд╛рд╕рд╛рдареА рддреА рд╣рдЯрд╡рд┐рдгреНрдпрд╛рдЪреА рдЖрдЬреНрдЮрд╛ рдЖрд╣реЗ Remove-AzStorageBlob - рдкрд░рдВрддреБ рддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдореВрд▓реНрдпреЗ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд┐рд╢реЗрд╖рддрдГ, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрдВрдЯреЗрдирд░рдЪреЗ рдирд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛рд╕ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреЛрд░реЗрдЬ рдЦрд╛рддреНрдпрд╛рд╕рд╣ рдпрд╛ рдХрдорд╛рдВрдбрд╡рд░ рдкрд╛рд╕ рдХрд░рд╛.

$osDiskUri = $vm.StorageProfile.OSDisk.Vhd.Uri
$osDiskContainerName = $osDiskUri.Split('/')[-2]
$osDiskStorageAcct = Get-AzStorageAccount | where { $_.StorageAccountName -eq $osDiskUri.Split('/')[2].Split('.')[0] }
$osDiskStorageAcct | Remove-AzStorageBlob -Container $osDiskContainerName -Blob $osDiskUri.Split('/')[-1]

рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХ рд╕реНрдерд┐рддреА рдмреНрд▓реЙрдм рдХрд╛рдвреВрди рдЯрд╛рдХрдд рдЖрд╣реЗ

рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЬрд╕реЗ рдЖрдкрдг рдЖрдзреАрдЪ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рд▓рд╛ рдЖрд╣реЗ, рдЖрдореНрд╣реА рд╕реНрдЯреЛрд░реЗрдЬ рдХрдВрдЯреЗрдирд░ рдШреЗрддреЛ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╣реА рдбрд┐рд╕реНрдХ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рд╢реЗрд╡рдЯреА рдмреНрд▓реЙрдмрдордзреНрдпреЗ рдЖрд╣реЗ status, рдбрд┐рд▓реАрдЯ рдХрдорд╛рдВрдбрд▓рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд╛рд╕ рдХрд░рд╛ Remove-AzStorageBlob:

$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob

рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХ рдХрд╛рдвреВрди рдЯрд╛рдХрддреЛ

рдЖрдордЪреНтАНрдпрд╛ VM рд╕реЛрдмрдд рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕рд╣ рдЕрдЬреВрдирд╣реА рдбрд┐рд╕реНрдХ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рддреНрдпрд╛рдВрдЪреА рдЧрд░рдЬ рдирд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рджреЗрдЦреАрд▓ рд╣рдЯрд╡реВ. рдкреНрд░рдердо рддреНрдпрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдпрд╛ StorageProfile рдЖрдордЪреЗ VM рдЖрдгрд┐ рдорд╛рд▓рдорддреНрддрд╛ рд╢реЛрдзрд╛ Uri. рдЕрдиреЗрдХ рдбрд┐рд╕реНрдХреНрд╕ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рддреНрдпрд╛рдиреБрд╕рд╛рд░ рдПрдХ рд╕рд╛рдпрдХрд▓ рдЖрдпреЛрдЬрд┐рдд рдХрд░рддреЛ URI. рдкреНрд░рддреНрдпреЗрдХ URI рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╡рд╛рдкрд░реВрди рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреЛрд░реЗрдЬ рдЦрд╛рддреЗ рд╢реЛрдзреВ Get-AzStorageAccount. рдирдВрддрд░ рдЗрдЪреНрдЫрд┐рдд рдмреНрд▓реЙрдм рдирд╛рд╡ рдХрд╛рдврдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдЯреЛрд░реЗрдЬ URI рдкрд╛рд░реНрд╕ рдХрд░рд╛ рдЖрдгрд┐ рддреЗ рдбрд┐рд▓реАрдЯ рдХрдорд╛рдВрдбрдХрдбреЗ рдкрд╛рдард╡рд╛ Remove-AzStorageBlob рд╕реНрдЯреЛрд░реЗрдЬ рдЦрд╛рддреНрдпрд╛рд╕рд╣. рдХреЛрдбрдордзреНрдпреЗ рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕реЗрд▓:

if ($vm.DataDiskNames.Count -gt 0) {
    foreach ($uri in $vm.StorageProfile.DataDisks.Vhd.Uri) {
        $dataDiskStorageAcct = Get-AzStorageAccount -Name $uri.Split('/')[2].Split('.')[0]
        $dataDiskStorageAcct | Remove-AzStorageBlob -Container $uri.Split('/')[-2] -Blob $uri.Split('/')[-1]
    }
}

рдЖрдгрд┐ рдЖрддрд╛ "рдЖрдореНрд╣реА рдЖрдирдВрджреА рдЕрдВрддрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрд▓реЛ рдЖрд╣реЛрдд!" рдЖрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдпрд╛ рд╕рд░реНрд╡ рддреБрдХрдбреНрдпрд╛рдВрдордзреВрди рдПрдХ рд╕рдВрдкреВрд░реНрдг рдПрдХрддреНрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рджрдпрд╛рд│реВ рд▓реЗрдЦрдХ рдЕреЕрдбрдо рдмрд░реНрдЯреНрд░рд╛рдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдЕрд░реНрдзреНрдпрд╛ рд░рд╕реНрддреНрдпрд╛рдиреЗ рднреЗрдЯрд▓реЗ рдЖрдгрд┐ рддреЗ рд╕реНрд╡рддрдГ рдХреЗрд▓реЗ. рдпреЗрдереЗ рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рд╡рд╛рдЪреА рд▓рд┐рдВрдХ рдЖрд╣реЗ рдХрд╛рдврд╛-AzrVirtualMachine.ps1:

тЖТ GitHub

рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА Azure VM рд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рддреБрдордЪрд╛ рдкреНрд░рдпрддреНрди, рд╡реЗрд│ рдЖрдгрд┐ рдкреИрд╕рд╛ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдпрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЯрд┐рдкрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЙрдкрдпреБрдХреНрдд рд╡рд╛рдЯрддреАрд▓.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛