เบเบฒเบ™เปเบเป‰เป„เบ‚ เปเบฅเบฐเบฅเบถเบš Azure VMs เป‚เบ”เบเปƒเบŠเป‰ PowerShell

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ PowerShell, เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เปเบฅเบฐเบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™ IT เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ•เปˆเบฒเบ‡เป†เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ, เปเบ•เปˆเบเบฑเบ‡เบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ„เบฅเบฒเบง, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบเบฑเบš Azure. เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบต, เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบœเปˆเบฒเบ™ PowerShell เปเบกเปˆเบ™เบชเบฐเบ”เบงเบเบเบงเปˆเบฒ เปเบฅเบฐเป„เบงเบเบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบœเปˆเบฒเบ™เบ›เบฐเบ•เบน Azure. เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เป‰เบฒเบกเป€เบงเบ—เบตเบ‚เบญเบ‡เบกเบฑเบ™, PowerShell เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เปƒเบ™เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปƒเบ”เบเปเป„เบ”เป‰.

ะะตะฒะฐะถะฝะพ, ั€ะฐะฑะพั‚ะฐะตั‚ะต ะปะธ ะฒั‹ ั Ubuntu, Red Hat ะธะปะธ Windows โ€” PowerShell ะฟะพะผะพะถะตั‚ ะบะพะฝั‚ั€ะพะปะธั€ะพะฒะฐั‚ัŒ ะพะฑะปะฐั‡ะฝั‹ะต ั€ะตััƒั€ัั‹. ะ˜ัะฟะพะปัŒะทัƒั ะผะพะดัƒะปัŒ Azure PowerShell, ะบ ะฟั€ะธะผะตั€ัƒ, ะผะพะถะฝะพ ะทะฐะดะฐะฒะฐั‚ัŒ ะปัŽะฑั‹ะต ัะฒะพะนัั‚ะฒะฐ ะฒะธั€ั‚ัƒะฐะปัŒะฝั‹ั… ะผะฐัˆะธะฝ.

ะ’ ัั‚ะพะน ัั‚ะฐั‚ัŒะต ะผั‹ ั€ะฐััะผะพั‚ั€ะธะผ, ะบะฐะบ ะผะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ PowerShell, ั‡ั‚ะพะฑั‹ ะธะทะผะตะฝะธั‚ัŒ ั€ะฐะทะผะตั€ ะ’ะœ ะฒ ะพะฑะปะฐะบะต Azure, ะฐ ั‚ะฐะบะถะต ั‡ั‚ะพะฑั‹ ัƒะดะฐะปะธั‚ัŒ ะ’ะœ ะธ ะฐััะพั†ะธะธั€ะพะฒะฐะฝะฝั‹ะต ั ะฝะตะน ะพะฑัŠะตะบั‚ั‹.

เบเบฒเบ™เปเบเป‰เป„เบ‚ เปเบฅเบฐเบฅเบถเบš Azure VMs เป‚เบ”เบเปƒเบŠเป‰ PowerShell

เบชเปเบฒเบ„เบฑเบ™! ะะต ะทะฐะฑัƒะดัŒั‚ะต ะฟั€ะพั‚ะตั€ะตั‚ัŒ ั€ัƒะบะธ ัะฐะฝะธั‚ะฐะนะทะตั€ะพะผ ะฟะพะดะณะพั‚ะพะฒะธั‚ัŒัั ะบ ั€ะฐะฑะพั‚ะต:

  • เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบกเบ”เบนเบ™ Azure PowerShell Module โ€” ะตะณะพ ะผะพะถะฝะพ ะทะฐะณั€ัƒะทะธั‚ัŒ ะธะท PowerShell Gallery ะบะพะผะฐะฝะดะพะน Install-Module Az.
  • ะัƒะถะฝะพ ะฐัƒั‚ะตะฝั‚ะธั„ะธั†ะธั€ะพะฒะฐั‚ัŒัั ะฒ ะพะฑะปะฐะบะต Azure, ะณะดะต ะบั€ัƒั‚ะธั‚ัั ะฒะธั€ั‚ัƒะฐะปัŒะฝะฐั ะผะฐัˆะธะฝะฐ, ะฒั‹ะฟะพะปะฝะธะฒ ะบะพะผะฐะฝะดัƒ Connect-AzAccount.

ะ”ะปั ะฝะฐั‡ะฐะปะฐ ัะพะทะดะฐะดะธะผ ัะบั€ะธะฟั‚, ะบะพั‚ะพั€ั‹ะน ั€ะตัะฐะนะทะธั‚ Azure VM. ะžั‚ะบั€ะพะตะผ VS Code ะธ ัะพั…ั€ะฐะฝะธะผ ะฝะพะฒั‹ะน PowerShell ัะบั€ะธะฟั‚ ะฟะพะด ะฝะฐะทะฒะฐะฝะธะตะผ เบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”-AzVirtualMachine.ps1 โ€” ะฒ ะฝะตะณะพ ะผั‹ ะฟะพ ั…ะพะดัƒ ะฟั€ะธะผะตั€ะฐ ะฑัƒะดะตะผ ะดะพะฑะฐะฒะปัั‚ัŒ ะบัƒัะบะธ ะบะพะดะฐ.

เบžเบงเบเป€เบฎเบปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบกเบตเบ‚เบฐเบซเบ™เบฒเบ” VM

เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเบ›เปˆเบฝเบ™เบ‚เบฐเบซเบ™เบฒเบ” VM, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡ virtual เปƒเบ™ Azure cloud. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ Get-AzVMSize.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡ virtual devvm01 เบˆเบฒเบโ€‹เบเบธเปˆเบกโ€‹เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™โ€‹ dev ะทะฐะฟั€ะฐัˆะธะฒะฐะตะผ ะฒัะตะฒะพะทะผะพะถะฝั‹ะต ะดะพะฟัƒัั‚ะธะผั‹ะต ั€ะฐะทะผะตั€ั‹:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(ะ’ ั€ะตะฐะปัŒะฝั‹ั… ะทะฐะดะฐั‡ะฐั…, ะตัั‚ะตัั‚ะฒะตะฝะฝะพ, ะฒะผะตัั‚ะพ ResourceGroupName=dev ะธ VMName=devm01 ะฒั‹ ะฑัƒะดะตั‚ะต ัƒะบะฐะทั‹ะฒะฐั‚ัŒ ัะฒะพะธ ะทะฝะฐั‡ะตะฝะธั ัั‚ะธั… ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ.)

ะšะพะผะฐะฝะดะฐ ะฒะตั€ะฝะตั‚ ะฟั€ะธะผะตั€ะฝะพ ั‚ะฐะบะพะน ะฟะตั€ะตั‡ะตะฝัŒ:

เบเบฒเบ™เปเบเป‰เป„เบ‚ เปเบฅเบฐเบฅเบถเบš Azure VMs เป‚เบ”เบเปƒเบŠเป‰ PowerShell

ะญั‚ะพ ะฒัะต ะฒะพะทะผะพะถะฝั‹ะต ะฒะฐั€ะธะฐะฝั‚ั‹ ั€ะฐะทะผะตั€ะพะฒ, ะบะพั‚ะพั€ั‹ะต ะผะพะถะฝะพ ะทะฐะดะฐั‚ัŒ ะดะปั ะดะฐะฝะฝะพะน ะฒะธั€ั‚ัƒะฐะปัŒะฝะพะน ะผะฐัˆะธะฝั‹.

เบกเบฒเบ›เบฑเบšเบ‚เบฐเปœเบฒเบ”เบฅเบปเบ”

ะ”ะปั ะฟั€ะธะผะตั€ะฐ ะผั‹ ัะดะตะปะฐะตะผ ั€ะตัะฐะนะท ะฝะฐ ะฝะพะฒั‹ะน ั€ะฐะทะผะตั€ Standard_B1ls - เบฅเบฒเบงเบขเบนเปˆเปƒเบ™เบญเบฑเบ™เบ”เบฑเบšเบ—เปเบฒเบญเบดเบ”เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. (เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบŠเบตโ€‹เบงเบดเบ”โ€‹เบ—เบตเปˆโ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹, เปเบ™เปˆโ€‹เบ™เบญเบ™โ€‹, เบ—เปˆเบฒเบ™โ€‹เป€เบฅเบทเบญเบโ€‹เป€เบญเบปเบฒโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เปƒเบ”โ€‹เบเปโ€‹เบ•เบฒเบกโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹.)

  1. เบ—เปเบฒเบญเบดเบ”เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ Get-AzVM ะฟะพะปัƒั‡ะฐะตะผ ัะฒะตะดะตะฝะธั ะพ ะฝะฐัˆะตะผ ะพะฑัŠะตะบั‚ะต (ะฒะธั€ั‚ัƒะฐะปัŒะฝะพะน ะผะฐัˆะธะฝะต), ัะพั…ั€ะฐะฝัั ะธั… ะฒ ะฟะตั€ะตะผะตะฝะฝัƒัŽ $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. ะ—ะฐั‚ะตะผ ัƒ ัั‚ะพะณะพ ะพะฑัŠะตะบั‚ะฐ ะฑะตั€ะตะผ ัะฒะพะนัั‚ะฒะพ .HardwareProfile.VmSize เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเปƒเบซเบกเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. ะ˜ ั‚ะตะฟะตั€ัŒ ะฟั€ะพัั‚ะพ ะฒั‹ะฟะพะปะฝัะตะผ ะบะพะผะฐะฝะดัƒ ะพะฑะฝะพะฒะปะตะฝะธั ะ’ะœ โ€” Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. ะฃะฑะตะถะดะฐะตะผัั, ั‡ั‚ะพ ะฒัั‘ ะฟั€ะพัˆะปะพ ัƒัะฟะตัˆะฝะพ โ€” ะดะปั ัั‚ะพะณะพ ะพะฟัั‚ัŒ ะถะต ะทะฐะฟั€ะฐัˆะธะฒะฐะตะผ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ะพ ะฝะฐัˆะตะผ ะพะฑัŠะตะบั‚ะต ะธ ัะผะพั‚ั€ะธะผ ะฝะฐ ัะฒะพะนัั‚ะฒะพ $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ Standard_B1ls - เบ™เบฑเป‰เบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบฅเบปเบ”เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ›เบ•เบทเปˆเบกเบญเบตเบเปเบฅเบฐเบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบชเปเบฒเป€เบฅเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ” VMs เบซเบผเบฒเบเบญเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰ array.

ะ ั‡ั‚ะพ ะฝะฐัั‡ะตั‚ ัƒะดะฐะปะตะฝะธั ะ’ะœ ะฒ Azure?

เบ”เป‰เบงเบเบเบฒเบ™เบฅเบถเบš, เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบเบปเบ‡เป„เบ›เบเบปเบ‡เบกเบฒเบ—เบตเปˆเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบญเบปเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ™เบตเป‰, เบฅเบงเบกเบ—เบฑเบ‡:

  • เบšเบนเบ”เบ–เบฑเบ‡เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบงเบดเบ™เบดเป„เบช
  • เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ•เป‰เบ•เบญเบš
  • เบ—เบตเปˆเบขเบนเปˆ IP เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ
  • ะกะธัั‚ะตะผะฝั‹ะน ะดะธัะบ ะธ blob, ะณะดะต ั…ั€ะฐะฝะธั‚ัั ะตะณะพ ัั‚ะฐั‚ัƒั
  • เปเบœเปˆเบ™เบ‚เปเป‰เบกเบนเบ™

ะŸะพัะตะผัƒ ะผั‹ ัะพะทะดะฐะดะธะผ ั„ัƒะฝะบั†ะธัŽ ะธ ะฝะฐะทะพะฒะตะผ ะตะต Remove-AzrVirtualMachine โ€” ะธ ะพะฝะฐ ะฑัƒะดะตั‚ ัƒะดะฐะปัั‚ัŒ ะฝะต ั‚ะพะปัŒะบะพ Azure VM, ะฝะพ ะธ ะฒัะต ะฒั‹ัˆะตะฟะตั€ะตั‡ะธัะปะตะฝะฝะพะต.

ะ˜ะดั‘ะผ ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะผ ะฟัƒั‚ะตะผ ะธ ัะฝะฐั‡ะฐะปะฐ ะฟะพะปัƒั‡ะฐะตะผ ะฝะฐัˆ ะพะฑัŠะตะบั‚ (ะ’ะœ) ั ะฟะพะผะพั‰ัŒัŽ ะบะพะผะฐะฝะดั‹ Get-AzVm. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เบฅเบปเบ” WINSRV19 เบˆเบฒเบโ€‹เบเบธเปˆเบกโ€‹เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™โ€‹ MyTestVMs.

ะกะพั…ั€ะฐะฝะธะผ ัั‚ะพั‚ ะพะฑัŠะตะบั‚ ะฒะผะตัั‚ะต ัะพ ะฒัะตะผะธ ะตะณะพ ัะฒะพะนัั‚ะฒะฐะผะธ ะฒ ะฟะตั€ะตะผะตะฝะฝัƒัŽ $vm:

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

ะฃะดะฐะปัะตะผ ะบะพะฝั‚ะตะนะฝะตั€ ั ั„ะฐะนะปะฐะผะธ ะดะธะฐะณะฝะพัั‚ะธะบะธ ะทะฐะณั€ัƒะทะบะธ

เป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡ VM เปƒเบ™ Azure, เบœเบนเป‰เปƒเบŠเป‰เบเบฑเบ‡เบ–เบทเบเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบชเป‰เบฒเบ‡เบ–เบฑเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบช boot (boot diagnostics container), เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบกเบตเบšเบฑเบ™เบซเบฒเบเบฑเบšเบเบฒเบ™ booting, เบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเบซเบฑเบ™เป„เบ›เบซเบฒเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบกเบทเปˆเบญ VM เบ–เบทเบเบฅเบถเบš, เบ–เบฑเบ‡เบ™เบตเป‰เบ–เบทเบเบ›เบฐเป„เบงเป‰เป€เบžเบทเปˆเบญเบชเบทเบšเบ•เปเปˆเบเบฒเบ™เบกเบตเบขเบนเปˆเบ—เบตเปˆเบšเปเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เปƒเบซเป‰เปเบเป‰เป„เบ‚เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ™เบตเป‰.

  1. ะกะฟะตั€ะฒะฐ ะฒั‹ััะฝะธะผ, ะบะฐะบะพะผัƒ ัั‚ะพั€ะฐะดะถ-ะฐะบะบะฐัƒะฝั‚ัƒ ะฟั€ะธะฝะฐะดะปะตะถะธั‚ ัั‚ะพั‚ ะบะพะฝั‚ะตะนะฝะตั€ โ€” ะดะปั ัั‚ะพะณะพ ะฝะฐะผ ะฝัƒะถะฝะพ ั€ะฐะทั‹ัะบะฐั‚ัŒ ัะฒะพะนัั‚ะฒะพ storageUri เบขเบนเปˆเปƒเบ™เบฅเปเบฒเป„เบชเป‰เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ DiagnosticsProfile ะฝะฐัˆะตะน ะ’ะœ. ะ”ะปั ัั‚ะพะณะพ ั ะธัะฟะพะปัŒะทัƒัŽ ะฒะพั‚ ั‚ะฐะบะพะต ั€ะตะณัƒะปัั€ะฝะพะต ะฒั‹ั€ะฐะถะตะฝะธะต:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. ะขะตะฟะตั€ัŒ ะฝะฐะดะพ ัƒะทะฝะฐั‚ัŒ ะธะผั ะบะพะฝั‚ะตะนะฝะตั€ะฐ, ะฐ ะดะปั ัั‚ะพะณะพ ะฝัƒะถะฝะพ ะฟะพะปัƒั‡ะธั‚ัŒ VM ID ั ะฟะพะผะพั‰ัŒัŽ ะบะพะผะฐะฝะดั‹ 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-ะฐะดั€ะตั

ะฃ ะฝะฐัˆะตะน ะ’ะœ ะพัั‚ะฐะปะธััŒ ะพะดะธะฝ (ะธะปะธ ะดะฐะถะต ะฝะตัะบะพะปัŒะบะพ) ัะตั‚ะตะฒั‹ั… ะธะฝั‚ะตั€ั„ะตะนัะพะฒ (NICs) โ€” ั‡ั‚ะพะฑั‹ ัƒะดะฐะปะธั‚ัŒ ะธั… ะทะฐ ะฝะตะฝัƒะถะฝะพัั‚ัŒัŽ, ะฟั€ะพะนะดะตะผัั ะฟะพ ัะฒะพะนัั‚ะฒัƒ NetworkInterfaces ะฝะฐัˆะตะณะพ ะพะฑัŠะตะบั‚ะฐ VM ะธ ัƒะดะฐะปะธะผ NIC ะบะพะผะฐะฝะดะพะน Remove-AzNetworkInterface. ะะฐ ัะปัƒั‡ะฐะน, ะตัะปะธ ัะตั‚ะตะฒั‹ั… ะธะฝั‚ะตั€ั„ะตะนัะพะฒ ะฑะพะปะตะต ะพะดะฝะพะณะพ, ะธัะฟะพะปัŒะทัƒะตะผ ั†ะธะบะป. ะ—ะฐะพะดะฝะพ ะดะปั ะบะฐะถะดะพะณะพ NIC ะฟั€ะพะฒะตั€ะธะผ ัะฒะพะนัั‚ะฒะพ IpConfiguration ะฝะฐ ะฟั€ะตะดะผะตั‚ ั‚ะพะณะพ, ะตัั‚ัŒ ะปะธ ัƒ ะธะฝั‚ะตั€ั„ะตะนัะฐ ะฟัƒะฑะปะธั‡ะฝั‹ะน IP ะฐะดั€ะตั. ะ‘ัƒะดะต ั‚ะฐะบะพะฒะพะน ะพะฑะฝะฐั€ัƒะถะธั‚ัั, ัƒะดะฐะปะธะผ ะตะณะพ ะบะพะผะฐะฝะดะพะน Remove-AzPublicIpAddress.

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบœเปˆเบฒเบ™ NICs เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ loop, เบฅเบถเบšเบžเบงเบเบกเบฑเบ™, เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบต IP เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบซเบผเบทเบšเปเปˆ. เบ–เป‰เบฒเบกเบต, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบซเป‰เบงเบดเป€เบ„เบฒเบฐเบŠเบฑเบšเบชเบดเบ™ PublicIpAddress, ะดะพัั‚ะฐะตะผ ะฟะพ ID ะธะผั ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะตะณะพ ั€ะตััƒั€ัะฐ ะธ ัƒะดะฐะปัะตะผ ะตะณะพ:


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
        }
    }
}

เบเบฒเบ™เบ–เบญเบ™เปเบœเปˆเบ™เบฅเบฐเบšเบปเบš

ะ”ะธัะบ ะžะก ะฟั€ะตะดัั‚ะฐะฒะปัะตั‚ ัะพะฑะพะน blob, ะดะปั ัƒะดะฐะปะตะฝะธั ะบะพะตะณะพ ะธะผะตะตั‚ัั ะบะพะผะฐะฝะดะฐ 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]

ะฃะดะฐะปัะตะผ Blob ัั‚ะฐั‚ัƒัะฐ ัะธัั‚ะตะผะฝะพะณะพ ะดะธัะบะฐ

ะ”ะปั ัั‚ะพะณะพ, ะบะฐะบ ะฒั‹ ัƒะถะต ะฝะฐะฒะตั€ะฝัะบะฐ ะดะพะณะฐะดะฐะปะธััŒ, ะผั‹ ะฑะตั€ะตะผ ัั‚ะพั€ะฐะดะถ-ะบะพะฝั‚ะตะนะฝะตั€, ะฒ ะบะพั‚ะพั€ะพะผ ั…ั€ะฐะฝะธั‚ัั ะดะฐะฝะฝั‹ะน ะดะธัะบ, ะธ, ะฟะพะดั€ะฐะทัƒะผะตะฒะฐั, ั‡ั‚ะพ blob ะฒ ะบะพะฝั†ะต ัะพะดะตั€ะถะธั‚ status, ะฟะตั€ะตะดะฐะตะผ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะธะต ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะบะพะผะฐะฝะดะต ัƒะดะฐะปะตะฝะธั Remove-AzStorageBlob:

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

ะ˜, ะฝะฐะบะพะฝะตั†, ัƒะดะฐะปัะตะผ ะดะธัะบะธ ั ะดะฐะฝะฝั‹ะผะธ

ะฃ ะฝะฐัˆะตะน ะ’ะœ ะผะพะณะปะธ ะพัั‚ะฐะฒะฐั‚ัŒัั ะดะธัะบะธ ั ะดะฐะฝะฝั‹ะผะธ, ะบะพั‚ะพั€ั‹ะต ะฑั‹ะปะธ ะบ ะฝะตะน ะฟั€ะธะฐั‚ั‚ะฐั‡ะตะฝั‹. ะ•ัะปะธ ะฒ ะฝะธั… ะฝะตั‚ ะฝะตะพะฑั…ะพะดะธะผะพัั‚ะธ, ัƒะดะฐะปะธะผ ะธ ะธั… ั‚ะพะถะต. ะกะฝะฐั‡ะฐะปะฐ ั€ะฐัะฟะฐั€ัะธะผ StorageProfile VM เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเบŠเบญเบเบซเบฒเบŠเบฑเบšเบชเบดเบ™ Uri. ะ•ัะปะธ ะดะธัะบะพะฒ ะฝะตัะบะพะปัŒะบะพ, ะพั€ะณะฐะฝะธะทัƒะตะผ ั†ะธะบะป ะฟะพ URI. ะ”ะปั ะบะฐะถะดะพะณะพ URI ะฝะฐะนะดะตะผ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะธะน ัั‚ะพั€ะฐะดะถ-ะฐะบะบะฐัƒะฝั‚ ั ะฟะพะผะพั‰ัŒัŽ Get-AzStorageAccount. ะ—ะฐั‚ะตะผ ั€ะฐัะฟะฐั€ัะธะผ storage URI, ั‡ั‚ะพะฑั‹ ะฒั‹ั‚ะฐั‰ะธั‚ัŒ ะฝัƒะถะฝะพะต ะธะผั blob-a ะธ ะฟะตั€ะตะดะฐั‚ัŒ ะตะณะพ ะบะพะผะฐะฝะดะต ัƒะดะฐะปะตะฝะธั 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]
    }
}

เปเบฅเบฐเบ”เบฝเบงเบ™เบตเป‰ "เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบ–เบดเบ‡เบˆเบธเบ”เบˆเบปเบšเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบธเบ!" เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฅเบงเบšเบฅเบงเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบ”เบฝเบงเบˆเบฒเบเบŠเบดเป‰เบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบœเบนเป‰เบ‚เบฝเบ™เปƒเบˆเบ”เบต Adam Bertram เป„เบ”เป‰เบžเบปเบšเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เป€เบ„เบดเปˆเบ‡เบ—เบฒเบ‡เปเบฅเบฐเป€เบฎเบฑเบ”เบกเบฑเบ™เป€เบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš script เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ Remove-AzrVirtualMachine.ps1:

โ†’ GitHub

ะะฐะดะตัŽััŒ, ั‡ั‚ะพ ัั‚ะธ ะฟั€ะฐะบั‚ะธั‡ะตัะบะธะต ัะพะฒะตั‚ั‹ ะฟั€ะธะณะพะดัั‚ัั ะฒะฐะผ, ั‡ั‚ะพะฑั‹ ััะบะพะฝะพะผะธั‚ัŒ ัะธะปั‹, ะฒั€ะตะผั ะธ ัั€ะตะดัั‚ะฒะฐ ะฟั€ะธ ั€ะฐะฑะพั‚ะต ั Azure VMs.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™