ืžืึธื“ื™ืคื™ืฆื™ืจืŸ ืื•ืŸ ื•ื™ืกืžืขืงืŸ Azure VMs ื ื™ืฆืŸ PowerShell

ืžื™ื˜ PowerShell, ืขื ื“ื–ืฉืึทื ื™ืจื– ืื•ืŸ IT ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจืก ื”ืฆืœื—ื” ืึธื˜ืึทืžื™ื™ื˜ ืคืึทืจืฉื™ื“ืŸ ื˜ืึทืกืงืก ื•ื•ืขืŸ ื–ื™ื™ ืึทืจื‘ืขื˜ืŸ ื ื™ื˜ ื‘ืœื•ื™ื– ืžื™ื˜ ืœืึธืงืึทืœ, ืึธื‘ืขืจ ืื•ื™ืš ืžื™ื˜ ื•ื•ืึธืœืงืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ, ืกืคึผืขืฆื™ืขืœ ืžื™ื˜ Azure. ืื™ืŸ ืขื˜ืœืขื›ืข ืงืึทืกืขืก, ืืจื‘ืขื˜ืŸ ื“ื•ืจืš PowerShell ืื™ื– ืคื™ืœ ืžืขืจ ื‘ืึทืงื•ื•ืขื ืื•ืŸ ืคืึทืกื˜ืขืจ ื•ื•ื™ ืืจื‘ืขื˜ืŸ ื“ื•ืจืš ื“ื™ Azure ื˜ื•ื™ืขืจ. ื“ืึทื ืง ืฆื• ื–ื™ื™ืŸ ืงืจื™ื™ึทื–-ืคึผืœืึทื˜ืคืึธืจืžืข ื ืึทื˜ื•ืจ, PowerShell ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืื•ื™ืฃ ืงื™ื™ืŸ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื.

ืขืก ืžืึทื›ื˜ ื ื™ืฉื˜ ืื•ื™ืก ืื•ื™ื‘ ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜ Ubuntu, ืจืขื“ ื”ืขื˜ ืื“ืขืจ Windows โ€” ืคึผืึทื•ืขืจืฉืขืœ ื•ื•ืขื˜ ืื™ื™ืš ื”ืขืœืคึฟืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื•ื•ืึธืœืงืŸ ืจืขืกื•ืจืกืŸ. ื ื™ืฆืŸ ื“ืขื ืžืึธื“ื•ืœ Azure PowerShell, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ืงื™ื™ืŸ ืคึผืจืึธืคึผืขืจื˜ื™ืขืก ืคื•ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ PowerShell ืฆื• ืจืขืกื™ื–ืข ืึท VM ืื™ืŸ ื“ื™ Azure ื•ื•ืึธืœืงืŸ, ืื•ืŸ ื•ื™ืกืžืขืงืŸ ืึท VM ืื•ืŸ ื“ื™ ืคึฟืึทืจื‘ื•ื ื“ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ.

ืžืึธื“ื™ืคื™ืฆื™ืจืŸ ืื•ืŸ ื•ื™ืกืžืขืงืŸ Azure VMs ื ื™ืฆืŸ PowerShell

ื•ื•ื™ื›ื˜ื™ืง! ื“ื• ื–ืืœืกื˜ ื ื™ืฉื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ื•ื•ื™ืฉืŸ ื“ื™ื™ืŸ ื”ืขื ื˜ ืžื™ื˜ ืกืึทื ื™ื˜ื™ื–ืขืจ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ืคึฟืึทืจ ืึทืจื‘ืขื˜:

  • ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ืึท ืžืึธื“ื•ืœืข Azure PowerShell ืžืึธื“ื•ืœืข - ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ืึทื•ื ืœืึธื•ื“ื™ื“ ืคึฟื•ืŸ PowerShell Gallery ืžื™ื˜ ื“ื™ ื‘ืึทืคึฟืขืœ Install-Module Az.
  • ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธื˜ืขื ื˜ืึทืงื™ื™ื˜ ืื™ืŸ ื“ื™ Azure ื•ื•ืึธืœืงืŸ ื•ื•ื• ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืื™ื– ืคืœื™ืกื ื“ื™ืง ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ Connect-AzAccount.

ืขืจืฉื˜ืขืจ, ืœืึธื–ืŸ ืื•ื ื“ื– ืžืึทื›ืŸ ืึท ืฉืจื™ืคื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ืจืขืกื™ื–ืข ืึท Azure VM. ืœืึธืžื™ืจ ืขืคึฟืขื ืขืŸ VS ืงืึธื“ ืื•ืŸ ืจืึทื˜ืขื•ื•ืขืŸ ืึท ื ื™ื™ึทืข PowerShell ืฉืจื™ืคื˜ ื’ืขืจื•ืคืŸ ืจืขืกื™ื–ืข-AzVirtualMachine.ps1 - ืžื™ืจ ื•ื•ืขืœืŸ ืœื™ื™ื’ืŸ ืฉื˜ื™ืง ืคื•ืŸ ืงืึธื“ ืฆื• ืขืก ื•ื•ื™ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ืคึผืจืึธื’ืจืขืกื™ื–.

ืžื™ืจ ื‘ืขื˜ืŸ ื“ื™ ื‘ื ื™ืžืฆื VM ืกื™ื–ืขืก

ืื™ื™ื“ืขืจ ืื™ืจ ื˜ื•ื™ืฉืŸ ื“ื™ VM ื’ืจื™ื™ืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืคึผืึทืกื™ืง ืกื™ื–ืขืก ืคึฟืึทืจ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ืื™ืŸ ื“ื™ Azure ื•ื•ืึธืœืงืŸ. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ Get-AzVMSize.

ืึทื–ื•ื™ ืคึฟืึทืจ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ devvm01 ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ ื’ืจื•ืคึผืข Dev ืžื™ืจ ื‘ืขื˜ืŸ ืึทืœืข ืžืขื’ืœืขืš ืคึผืึทืกื™ืง ืกื™ื–ืขืก:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืคึผืจืึธื‘ืœืขืžืก, ืคื•ืŸ ืงื•ืจืก, ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ResourceGroupName=ื“ืขื•ื• ะธ VMName=devvm01 ืื™ืจ ื•ื•ืขื˜ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื•ื•ืึทืœื•ืขืก ืคึฟืึทืจ ื“ื™ ืคึผืึทืจืึทืžืขื˜ืขืจืก.)

ื“ืขืจ ื‘ืึทืคึฟืขืœ ื•ื•ืขื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

ืžืึธื“ื™ืคื™ืฆื™ืจืŸ ืื•ืŸ ื•ื™ืกืžืขืงืŸ Azure VMs ื ื™ืฆืŸ PowerShell

ื“ืึธืก ื–ืขื ืขืŸ ืึทืœืข ืžืขื’ืœืขืš ื’ืจื™ื™ืก ืึธืคึผืฆื™ืขืก ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืฉื˜ืขืœืŸ ืคึฟืึทืจ ืึท ื’ืขื’ืขื‘ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ.

ื–ืืœ ืก ืจืขืกื™ื–ืข ื“ื™ ืžืึทืฉื™ืŸ

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ื•ื•ืขืœืŸ ื˜ื•ื™ืฉืŸ ื“ื™ ื’ืจื™ื™ืก ืฆื• ืึท ื ื™ื™ึทืข ื’ืจื™ื™ืก ืกื˜ืึทื ื“ืึทืจื“_ื‘1ืœืก - ืขืจ ืื™ื– ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืึธืจื˜ ืื•ื™ืฃ ื“ืขืจ ืจืฉื™ืžื” ืื•ื™ื‘ืŸ. (ืื™ืŸ ืคืึทืงื˜ื™ืฉ-ืœืขื‘ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–, ืคื•ืŸ ืงื•ืจืก, ืื™ืจ ืงืœื™ื™ึทื‘ืŸ ื“ื™ ื’ืจื™ื™ืก ืื™ืจ ื“ืึทืจืคึฟืŸ.)

  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

ืื•ื™ื‘ ืžื™ืจ ื–ืขืŸ ื“ืึธืจื˜ ืกื˜ืึทื ื“ืึทืจื“_ื‘1ืœืก - ื“ืึธืก ืžื™ื™ื ื˜ ืึทื– ืึทืœืฅ ืื™ื– ืื™ืŸ ืกื“ืจ, ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืžืึทืฉื™ืŸ ืื™ื– ื’ืขื‘ื™ื˜ืŸ. ืื™ืจ ืงืขื ืขืŸ ื’ื™ื™ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ืื•ืŸ ื‘ื•ื™ืขืŸ ืื•ื™ืฃ ื“ื™ื™ืŸ ื”ืฆืœื—ื” ื“ื•ืจืš ืจืขืกื™ื–ื™ื ื’ ืขื˜ืœืขื›ืข VMs ืื™ืŸ ืึทืžืึธืœ ืžื™ื˜ ืึท ืžืขื ื’ืข.

ื•ื•ืึธืก ื•ื•ืขื’ืŸ ื“ื™ืœื™ื˜ื™ื ื’ ืึท VM ืื™ืŸ Azure?

ืžื™ื˜ ื“ื™ืœื™ืฉืึทืŸ, ื ื™ื˜ ืึทืœืฅ ืื™ื– ื•ื•ื™ ืคึผืฉื•ื˜ ืื•ืŸ ืกื˜ืจื™ื™ื˜ืคืึธืจื•ื•ืขืจื“ ื•ื•ื™ ืขืก ืงืขืŸ ื•ื™ืกืงื•ืžืขืŸ. ื ืึธืš ืึทืœืข, ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ืึท ื ื•ืžืขืจ ืคื•ืŸ ืจืขืกื•ืจืกืŸ ืคึฟืึทืจื‘ื•ื ื“ืŸ ืžื™ื˜ ื“ืขื ืžืึทืฉื™ืŸ, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜:

  • ืฉื˜ื™ื•ื•ืœ ื“ื™ืึทื’ื ืึธืกื˜ื™ืงืก ืกื˜ืึธืจื™ื“ื–ืฉ ืงืึทื ื˜ื™ื™ื ืขืจื–
  • ื ืขืฅ ื™ื ื˜ืขืจืคื™ื™ืกื™ื–
  • ืฆื™ื‘ื•ืจ IP ืึทื“ืจืขืกืขืก
  • ืกื™ืกื˜ืขื ื“ื™ืกืง ืื•ืŸ ื‘ืœืึธื‘ ื•ื•ื• ื–ื™ื™ึทืŸ ืกื˜ืึทื˜ื•ืก ืื™ื– ืกื˜ืึธืจื“
  • ื“ืึทื˜ืึท ื“ื™ืกืงืก

ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืึท ืคึฟื•ื ืงืฆื™ืข ืื•ืŸ ืจื•ืคืŸ ืขืก Remove-AzrVirtualMachine - ืื•ืŸ ืขืก ื•ื•ืขื˜ ื•ื™ืกืžืขืงืŸ ื ื™ื˜ ื‘ืœื•ื™ื– Azure VM, ืึธื‘ืขืจ ืื•ื™ืš ืึทืœืข ื“ื™ ืื•ื™ื‘ืŸ.

ืžื™ืจ ื’ื™ื™ืŸ ื“ื™ ื ืึธืจืžืึทืœ ื•ื•ืขื’ ืื•ืŸ ืขืจืฉื˜ืขืจ ื‘ืึทืงื•ืžืขืŸ ืื•ื ื“ื–ืขืจ ื›ื™ื™ืคืขืฅ (VM) ื ื™ืฆืŸ ื“ื™ ื‘ืึทืคึฟืขืœ Get-AzVm. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืœืึธื–ืŸ ืขืก ื–ื™ื™ืŸ ืึท ืžืึทืฉื™ืŸ WINSRV19 ืคื•ืŸ ื“ื™ ืžื™ื˜ืœ ื’ืจื•ืคึผืข MyTestVMs.

ื–ืืœ ืก ืจืึทื˜ืขื•ื•ืขืŸ ื“ืขื ื›ื™ื™ืคืขืฅ ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ืึทืœืข ื–ื™ื™ึทืŸ ืคึผืจืึธืคึผืขืจื˜ื™ืขืก ืื™ืŸ ืึท ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง $vm:

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

ืจื™ืžื•ื•ื•ื™ื ื’ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืžื™ื˜ ืฉื˜ื™ื•ื•ืœ ื“ื™ืึทื’ื ืึธืกื˜ื™ืง ื˜ืขืงืขืก

ื•ื•ืขืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท VM ืื™ืŸ Azure, ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืื™ื– ืื•ื™ืš ื’ืขื‘ืขื˜ืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืคึฟืึทืจ ืกื˜ืึธืจื™ื ื’ ืฉื˜ื™ื•ื•ืœ ื“ื™ืึทื’ื ืึธืกื˜ื™ืงืก (ืฉื˜ื™ื•ื•ืœ ื“ื™ืึทื’ื ืึธืกื˜ื™ืงืก ืงืึทื ื˜ื™ื™ื ืขืจ), ืึทื–ื•ื™ ืึทื– ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ืคึผืจืึธื‘ืœืขืžืก ืžื™ื˜ ื‘ื•ื˜ื™ื ื’, ืขืก ืื™ื– ืขืคึผืขืก ืฆื• ื•ื•ืขื ื“ืŸ ืฆื• ืคึฟืึทืจ ื˜ืจืึธื•ื‘ืœืขืฉืึธืึธื˜ื™ื ื’. ืึธื‘ืขืจ, ื•ื•ืขืŸ ื“ื™ VM ืื™ื– ืื•ื™ืกื’ืขืžืขืงื˜, ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ื– ืœื™ื ืงืก ืฆื• ืคืึธืจื–ืขืฆืŸ ื–ื™ื™ืŸ ืื™ืฆื˜ ืฆื™ืœ ืึธืŸ ืขืงื–ื™ืกื˜ืขื ืฅ. ื–ืืœ ืก ืคืึทืจืจื™ื›ื˜ืŸ ื“ืขื ืกื™ื˜ื•ืึทืฆื™ืข.

  1. ืขืจืฉื˜ืขืจ, ืœืึธืžื™ืจ ื’ืขืคึฟื™ื ืขืŸ ืื•ื™ืก ื•ื•ืึธืก ืกื˜ืึธืจื™ื“ื–ืฉ ื—ืฉื‘ื•ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื’ืขื”ืขืจื˜ ืฆื• - ืคึฟืึทืจ ื“ืขื ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืคืึทืจืžืึธื’ storageUri ืื™ืŸ ื“ื™ ื’ืขื“ืขืจืขื ืคื•ืŸ ื“ื™ ื›ื™ื™ืคืขืฅ DiagnosticsProfile ืื•ื ื“ื–ืขืจ VM. ืคึฟืึทืจ ื“ืขื ืื™ืš ื ื•ืฆืŸ ื“ืขื ืจืขื’ื•ืœืขืจ ืื•ื™ืกื“ืจื•ืง:
    $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 ืึทื“ืจืขืก

ืื•ื ื“ื–ืขืจ VM ื ืึธืš ื”ืื˜ ืื™ื™ืŸ (ืึธื“ืขืจ ืืคื™ืœื• ืขื˜ืœืขื›ืข) ื ืขืฅ ื™ื ื˜ืขืจืคื™ื™ืกื™ื– (ื ื™ืงืก) - ืฆื• ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ื–ื™ื™ ื•ื•ื™ ื•ืžื ื™ื™ื˜ื™ืง, ืœืึธื–ืŸ ืื•ื ื“ื– ื’ื™ื™ืŸ ื“ื•ืจืš ื“ื™ ืคืึทืจืžืึธื’ NetworkInterfaces ืื•ื ื“ื–ืขืจ VM ื›ื™ื™ืคืขืฅ ืื•ืŸ ื•ื™ืกืžืขืงืŸ ื“ื™ NIC ืžื™ื˜ ื“ื™ ื‘ืึทืคึฟืขืœ 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]
    }
}

ืื•ืŸ ืื™ืฆื˜ "ืžื™ืจ ื”ืึธื‘ืŸ ืจื™ื˜ืฉื˜ ื“ื™ ื’ืœื™ืงืœืขืš ืกืึธืฃ!" ืื™ืฆื˜ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึทืกืขืžื‘ืึทืœ ืึท ืื™ื™ืŸ ื’ืึทื ืฅ ืคื•ืŸ ืึทืœืข ื“ื™ ืคืจืึทื’ืžืึทื ืฅ. ื“ืขืจ ื’ื•ื˜ืขืจ ืžื—ื‘ืจ ืื“ื ื‘ืขืจื˜ืจืื ื”ืื˜ ื–ื™ืš ื‘ืื’ืขื’ื ื˜ ืžื™ื˜ ื“ื™ ื‘ืื ื•ืฆืขืจ ืื•ื™ืฃ ื”ืืœื‘ ื•ื•ืขื’ ืื•ืŸ ื“ืืก ืืœื™ื™ืŸ ื’ืขื˜ื•ืŸ. ื“ืึธ ืื™ื– ืึท ืœื™ื ืง ืฆื• ื“ื™ ืœืขืฆื˜ ืฉืจื™ืคื˜ ื’ืขืจื•ืคืŸ Remove-AzrVirtualMachine.ps1:

โ†’ ื’ื™ื˜ื”ื•ื‘

ืื™ืš ื”ืึธืคึฟืŸ ืื™ืจ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืคึผืจืึทืงื˜ื™ืฉ ืขืฆื•ืช ื ื•ืฆื™ืง ืื™ืŸ ืฉืคึผืึธืจืŸ ืื™ืจ ืžื™, ืฆื™ื™ื˜ ืื•ืŸ ื’ืขืœื˜ ื•ื•ืขืŸ ืื™ืจ ืึทืจื‘ืขื˜ ืžื™ื˜ Azure VMs.

ืžืงื•ืจ: www.habr.com

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster