PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Azure VM рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛

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

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

рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдк Azure рдХреНрд▓рд╛рдЙрдб рдореЗрдВ VM рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА VM рдФрд░ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

PowerShell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Azure VM рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛

рдорд╣рддреНрд╡рдкреВрд░реНрдг! рдХрд╛рдо рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░ рд╕реЗ рдкреЛрдВрдЫрдирд╛ рди рднреВрд▓реЗрдВ:

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ рдЬреЛ Azure VM рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рджреЗрдЧреАред рдЖрдЗрдП VS рдХреЛрдб рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ рдирдИ PowerShell рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реЗрд╡ рдХрд░реЗрдВ рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ-AzVirtualMachine.ps1 - рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ рд╣рдо рдЗрд╕рдореЗрдВ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рд╣рдо рдЙрдкрд▓рдмреНрдз рд╡реАрдПрдо рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ

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

рддреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд▓рд┐рдП devvm01 рд╕рдВрд╕рд╛рдзрди рд╕рдореВрд╣ рд╕реЗ рджреЗрд╡ рд╣рдо рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рдВрд╕рд╛рдзрдирд╕рдореВрд╣рдирд╛рдо=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 рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рд╡рд┐рд▓реЛрдкрди рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЖрдЦрд╝рд┐рд░рдХрд╛рд░, рдЗрд╕ рдорд╢реАрди рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ Remove-AzrVirtualMachine - рдФрд░ рдпрд╣ рди рдХреЗрд╡рд▓ Azure VM рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛, рдмрд▓реНрдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрдЧрд╛ред

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

рдЖрдЗрдП рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрд╕рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ $vm:

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

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

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

  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХрд┐рд╕ рднрдВрдбрд╛рд░рдг рдЦрд╛рддреЗ рдХрд╛ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдвреВрдВрдврдиреА рд╣реЛрдЧреА storageUri рд╡рд╕реНрддреБ рдХреЗ рдЖрдБрддреЛрдВ рдореЗрдВ DiagnosticsProfile рд╣рдорд╛рд░рд╛ рд╡реА.рдПрдо. рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
    $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 рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП. рдЦреИрд░, рдЪрд▓рд┐рдП рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ Remove-AzVm:

$null = $vm | Remove-AzVM -Force

рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдкрддрд╛ рд╣рдЯрд╛рдирд╛

рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдореЗрдВ рдЕрднреА рднреА рдПрдХ (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХрдИ) рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ (рдПрдирдЖрдИрд╕реА) рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВ NetworkInterfaces рд╣рдорд╛рд░рд╛ рд╡реАрдПрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдирдЖрдИрд╕реА рдХреЛ рд╣рдЯрд╛ рджреЗрдВ Remove-AzNetworkInterface. рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдкреНрд░рддреНрдпреЗрдХ рдПрдирдЖрдИрд╕реА рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ IpConfiguration рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдкрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдХреЛрдИ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕реЗ рдХрдорд╛рдВрдб рд╕реЗ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ Remove-AzPublicIpAddress.

рдпрд╣рд╛рдВ рдРрд╕реЗ рд╣реА рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рд╕рднреА рдПрдирдЖрдИрд╕реА рдХреЛ рдПрдХ рд▓реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рд╣реИред рдпрджрд┐ рд╣реИ, рддреЛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ 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
        }
    }
}

рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХ рдХреЛ рд╣рдЯрд╛рдирд╛

OS рдбрд┐рд╕реНрдХ рдПрдХ рдмреНрд▓реЙрдм рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рд╣реИ 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

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ

рд╣рдорд╛рд░реЗ рд╡реАрдПрдо рдореЗрдВ рдЕрднреА рднреА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдбрд┐рд╕реНрдХ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдЧрд░ рдЙрдирдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдЧреА рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рднреА рд╣рдЯрд╛ рджреЗрдВрдЧреЗ.' рдЖрдЗрдП рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ StorageProfile рд╣рдорд╛рд░рд╛ рд╡реАрдПрдо рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдвреВрдВрдвреЗрдВ Uri. рдпрджрд┐ рдХрдИ рдбрд┐рд╕реНрдХ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдЪрдХреНрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ URI. рдкреНрд░рддреНрдпреЗрдХ рдпреВрдЖрд░рдЖрдИ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рднрдВрдбрд╛рд░рдг рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ Get-AzStorageAccount. рдлрд┐рд░ рд╡рд╛рдВрдЫрд┐рдд рдмреНрд▓реЙрдм рдирд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реЗрдЬ рдпреВрдЖрд░рдЖрдИ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдбрд┐рд▓реАрдЯ рдХрдорд╛рдВрдб рдкрд░ рдкрд╛рд╕ рдХрд░реЗрдВ 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 VMs рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдпреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдпреБрдХреНрддрд┐рдпрд╛рдБ рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕, рд╕рдордп рдФрд░ рдзрди рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рд▓рдЧреЗрдВрдЧреАред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ