LoginSignup
1
1

More than 5 years have passed since last update.

Azure仮想マシン一括削除用スクリプト

Last updated at Posted at 2018-12-20

はじめに

Azureの良いところとして、検証をしたいときに仮想マシンを作成し、完了したら削除できるという使い勝手の良さがあると思います。
ただ、作成時には複数のリソースを自動で組み合わせてデプロイしてくれますが、
削除時には仮想マシン、ディスク、ネットワークインターフェースのそれぞれを削除する必要があり、
手間だなぁと感じることがあるため、まとめて削除してくれるスクリプトを作成してみました。
VM選択のところは、以下の「Japan Azure IaaS Support Blog」の記事を参考にしています。
https://blogs.technet.microsoft.com/jpaztech/2016/06/08/addavasetvmarm/

2019/4/3追記
「AzureRm」モジュールを用いたスクリプトでしたが「Az」コマンドに置き換えました。
動作に変更はありません。

スクリプトの流れ

本記事のスクリプトを実行すると、以下の流れでVM削除、ネットワークインターフェース削除、ディスク削除の処理を行います。
ディスクは非管理ディスク(VHD)と管理ディスクのどちらにも対応しています。
※パブリックIPは仮想マシンやNICの情報から紐づきを辿ることができず、削除されません。。。

手順

必要に応じて以下のパラメータ(変数)の値を編集し、スクリプトを実行します。
管理ディスクはスクリプト完了から削除まで、若干ラグがあります。
※ログインユーザーにはAzureADユーザーを使用すること(MSアカウントの場合Get-Credentialでのログイン不可)
※仮想マシンおよび接続するディスク(VHD、ディスク)が同一リソースグループであること
※削除はForceオプション付きなので対象を間違えないように注意

変数 入力する値
$UserName 使用するAzureADユーザーアカウント名。空文字でも可。(毎回ユーザーアカウントを入力するのが面倒な人用)

スクリプト

#
#Delete_VM
#

#-----------------------------------------------------
$ErrorActionPreference = "Stop"

$UserName = "kkusaya@jbs.com"
$Credential = Get-Credential -UserName $UserName -Message "Input Azure Account Password"
Connect-AzAccount -Credential $Credential

#Select Subscription
$Subscription = (Get-AzSubscription | Out-GridView -Title "Select an Azure Subscription ..." -PassThru).Name
Select-AzSubscription -Subscription $Subscription

#Get ResourceGroup Name
$ResourceGroup = (Get-AzResourceGroup |Out-GridView -Title "Select an Azure Resource Group ..." -PassThru).ResourceGroupName

#Get Target VM Name
$TargetVMName = (Get-AzVm -ResourceGroupName $ResourceGroup).Name |Out-GridView -Title "Select a VM ..." -PassThru

#Get Target VM Object
$VM = Get-AzVM -ResourceGroupName $ResourceGroup -Name $TargetVMName

#Get Parameter to judge Managed or UnManaged
$VMvhdValue = $VM.StorageProfile.OsDisk.Vhd.Uri
$VMdiskValue = $VM.StorageProfile.OsDisk.ManagedDisk.Id

#Deleting VM
Write-Host "VM Name:$TargetVMName"
Remove-AzVM -Name $TargetVMName -ResourceGroupName $ResourceGroup -Force
Write-Host "Delete VM"

#Delete NIC
$NICs = $VM.NetworkProfile.NetworkInterfaces.id
$NICs|ForEach-Object{
    $NICName = $_.Split("/")[-1]
    Write-Host "NIC Name:$NICName"
    Remove-AzNetworkInterface -Name $NICName -ResourceGroupName $ResourceGroup -Force
    Write-Host "Delete NIC"
}

#Delete Disk or VHD
if($VMvhdValue -and !$VMdiskValue){
    #VHD VM

    #Get Storage Context
    $StorageAccountName = $VM.StorageProfile.OsDisk.Vhd.Uri.Split("/")[2].Split(".")[0]
    $OSDiskName = $VM.StorageProfile.OsDisk.Vhd.Uri.Split("/")[4]
    $ContainerName = $VM.StorageProfile.OsDisk.Vhd.Uri.Split("/")[3]

    $StorageKey = (Get-AzStorageAccountKey -ResourceGroupName $ResourceGroup -Name $StorageAccountName).value[0]
    $Context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageKey

    #Delte OS Disk
    Write-Host "StorageAccount Name:$StorageAccountName"
    Write-Host "VHD Name:$OSDiskName"
    Remove-AzureStorageBlob -Container $ContainerName -Blob $OSDiskName -Context $Context -Force
    Write-Host "Delete VHD"

    #Delete Data Disk
    $DataDisks = $VM.StorageProfile.DataDisks
    $DataDisks|ForEach-Object{
        $DiskName = $_.Name + ".vhd"
        Write-Host "Disk Name:$DiskName"
        Remove-AzureStorageBlob -Container $ContainerName -Blob $DiskName -Context $Context -Force
        Write-Host "Delete Disk"
    }
}elseif(!$VMvhdValue -and $VMdiskValue){
    #Managed VM

    #Delete OS Disk
    $DiskName = $VM.StorageProfile.OsDisk.Name
    Write-Host "Disk Name:$DiskName"
    Remove-AzDisk -ResourceGroupName $ResourceGroup -DiskName $DiskName -Force
    Write-Host "Delete Disk"

    #Delete Data Disk
    $DataDisks = $VM.StorageProfile.DataDisks
    $DataDisks|ForEach-Object{
        $DiskName = $_.Name
        Write-Host "Disk Name:$DiskName"
        Remove-AzDisk -ResourceGroupName $ResourceGroup -DiskName $DiskName -Force
        Write-Host "Delete Disk"
    }
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1