Help us understand the problem. What is going on with this article?

AzureVMの電源状態一覧とそれをPowerShellスクリプトで取得する方法

More than 3 years have passed since last update.

はじめに

AzureVM(ARM版)の電源状態を使ってPowerShellやAutomationで処理をしたい時、公式の電源状態リストがなかなか見つからなかったのでその取得方法と共に残しておきます。

VMの状態を取得する

  • 電源状態を取得したいVMの情報を取得する。
$VMState = Get-AzureRmVM -Name 'VMName' -ResourceGroupName 'RGName' -Status
  • $VMStateには以下のような情報が入る。
ResourceGroupName       : RGName
Name                    : VMName
BootDiagnostics         : 
BootDiagnosticsText     : null
Disks                   : {targetVM}
DisksText               : [
                            {
                              "name": "VMName",
                              "statuses": [
                                {
                                  "code": "ProvisioningState/succeeded",
                                  "level": "Info",
                                  "displayStatus": "Provisioning succeeded",
                                  "message": null,
                                  "time": "2016-11-11T04:44:27.7188171Z"
                                }
                              ]
                            }
                          ]
Extensions              : {MicrosoftMonitoringAgent}
ExtensionsText          : [
                            {
                              "name": "MicrosoftMonitoringAgent",
                              "type": null,
                              "typeHandlerVersion": null,
                              "substatuses": null,
                              "statuses": null
                            }
                          ]
PlatformFaultDomain     : 
PlatformUpdateDomain    : 
RemoteDesktopThumbprint : 
VMAgent                 : Microsoft.Azure.Management.Compute.Models.VirtualMachineAgentInstanceView
VMAgentText             : {
                            "vmAgentVersion": "Unknown",
                            "extensionHandlers": null,
                            "statuses": [
                              {
                                "code": "ProvisioningState/Unavailable",
                                "level": "Warning",
                                "displayStatus": "Not Ready",
                                "message": "VM Agent is unresponsive.",
                                "time": "2016-11-13T09:28:08Z"
                              }
                            ]
                          }
Statuses                : {Microsoft.Azure.Management.Compute.Models.InstanceViewStatus, 
                          Microsoft.Azure.Management.Compute.Models.InstanceViewStatus}
StatusesText            : [
                            {
                              "code": "ProvisioningState/succeeded",
                              "level": "Info",
                              "displayStatus": "Provisioning succeeded",
                              "message": null,
                              "time": "2016-11-11T04:44:27.7344384Z"
                            },
                            {
                              "code": "PowerState/deallocated",
                              "level": "Info",
                              "displayStatus": "VM deallocated",
                              "message": null,
                              "time": null
                            }
                          ]
  • StatusesText→displayStatusがVMの電源状態なので、これを取得する。(StatusesText→codeで判定もできるがdisplayStatusの方がより詳しい情報が見れる)

  • 取得した情報から電源状態のみを抜き出す。

$VMState = Get-AzureRmVM -Name 'VMName' -ResourceGroupName 'RGName' -Status
$VMPowerState = $VMState.Statuses[1].DisplayStatus

$VMPowerStateに文字列型で電源情報が入っている。

VM deallocated

VMの電源状態リスト

取得文字列 状態
VM deallocated 停止済み(割り当て解除)
VM deallocating 停止中(割り当て解除)
VM running 起動済み
VM starting 起動中
VM stopping 停止中(リソース保持)
VM stopped 停止済み(リソース保持)
  • 割り当て解除は全てのリソースが開放され、VMに対して料金は課金されない。
  • リソース保持は停止しても引き続き課金は発生するが、リソースは保持される。

サンプルスクリプト

VMの電源状態で分岐して処理を行うスクリプト

$RGName = 'RGName'
$VMName = 'VMName'

$VMState = Get-AzureRmVM -Name $VMName -ResourceGroupName $RGName -Status
$VMPowerState = $VMState.Statuses[1].DisplayStatus
if ($VMPowerState -eq 'VM deallocated')
{
    '停止しています。' 
}
elseif ($VMPowerState -eq 'VM stopped')
{
    'リソース保持のまま停止しています。'
}
elseif ($VMPowerState -eq 'VM deallocating') 
{
    '停止処理中です。'
}
elseif ($VMPowerState -eq 'VM stopping')
{
    'リソース保持のまま停止処理中です。'
}
elseif ($VMPowerState -eq 'VM starting')
{
    '起動処理中です。'
}
elseif ($VMPowerState -eq 'VM running')
{
    '起動しています。'
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away