ネコの耳に念仏

ネコの耳に念仏

ガンバらない技術ブログを目指します

【Azure】リソースグループ内の全VMの電源状態を一括確認する方法【PowerShell】

Azure の複数のリソースグループに分散した複数の VM をまとめて管理している場合、どのインスタンスが起動してるの?停止してるの?を確認するだけでも大変ですよね。

そこで今回、リソースグループ名を指定するだけで、指定したリソースグループに含まれる全ての VM の電源状態を自動的に一括取得して確認することができる PowerShell スクリプトをご紹介します。

VM ではなく、VMSS の電源を一括確認したいよって人は、別の記事で方法を説明しているのでそちらをご覧ください。

別記事:【Azure】リソースグループ内の全VMSSの全インスタンスの電源状態を一括確認する方法【PowerShell】

前提条件

Azure PowerShell Az モジュールのコマンドレットを利用しますので、あらかじめ Azure PowerShell Az モジュールをインストールしてください。

インストール方法は、別の記事で手順を説明しているのでそちらをご覧ください。

別記事:Azure PowerShell (Az モジュール) のインストール方法

PowerShellで指定したリソースグループに含まれる全てのVMインスタンスの電源状態を確認する方法

PowerShellで、指定したリソースグループに含まれる全てのVMインスタンスの電源状態を確認するためのスクリプトは、下記のとおりです。

# 確認対象のリソースグループ名
$resourceGroupName = "MyResourceGroupName"

# Azureに接続
Connect-AzAccount

# リソースグループに含まれる全てのVM名を取得
$VmProperty = Get-AzVm -ResourceGroupName $ResourceGroupName
$VmNameArray = $VmProperty.Name

# VMごとに処理
foreach ($VmName in $VmNameArray){
    # インスタンスビューから電源状態のステータスコードを取得
    $VmInstanceView = Get-AzVm -ResourceGroupName $ResourceGroupName -Name $VmName -Status
    $VMDisplayStatus = $VmInstanceView.Statuses[1].DisplayStatus
    
    # VMの電源状態を判別
    if ($VMDisplayStatus -eq "VM starting")
    {
        "$VmName 開始処理中"
    }
    elseif ($VMDisplayStatus -eq "VM running")
    {
        "$VmName 実行中"
    }
    elseif ($VMDisplayStatus -eq "VM stopping")
    {
        "$VmName リソースを保持したまま停止処理中"
    }
    elseif ($VMDisplayStatus -eq "VM stopped")
    {
        "$VmName リソースを保持したまま停止中"
    }
    elseif ($VMDisplayStatus -eq "VM deallocating")
    {
        "$VmName 割り当て解除処理中"
    }
    elseif ($VMDisplayStatus -eq "VM deallocated")
    {
        "$VmName 割り当て解除済み"
    }
    else
    {
        "$VmName 電源状態不明"
    }
}

以上、ご参考ください。