LoginSignup
6
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-13

はじめに

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')
{
    '起動しています。'
}
6
4
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
6
4