PowerShell使ってAzure VMの設定や状態、IPアドレス、ディスクの情報を取得する方法

2020-04-24Azure,PowerShell/Azure CLI,Virtual Machines

Azure PowerShellを使用して、仮想マシン(Azure VM)のネットワークインターフェースやディスク(Azure Managed Disks)の設定を一括取得する方法です。

    • Get-AzVMで仮想マシンの設定を取得
    • Get-AzNetworkInterfaceでネットワークインターフェースの設定を取得
    • Get-AzDiskでマネージドディスクの設定を取得
    • コマンドレットを組み合わせて仮想マシンの設定をまとめて取得

今回は、仮想マシンのプライベートIPアドレスや、マネージドディスクのサイズ、ストレージの種類などをまとめて取得する方法を確認しています。

※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※本記事では、Azure Managed Disks(Azure マネージド ディスク)をマネージドディスクとして表記しています。

スポンサーリンク

Azure PowerShellを使って仮想マシンの設定情報を取得

仮想マシンの情報を取得する場合はGet-AzVMを使う

仮想マシンの情報を取得する場合は、Get-AzVMコマンドレットを使用します。

Get-AzVM

リソースグループやリージョン(場所)などの情報が表示されます。
-Statusオプションを使うと、仮想マシンの状態(起動中や割り当て解除などのステータス)を確認できます。

PS C:\> Get-AzVM
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState Zone
—————– —- ——– —— —— — —————– —-
test-rg-01 test-vm-01 japaneast Standard_B2ms Windows test-vm-XXXXX Succeeded 1
test-rg-01 test-vm-02 japaneast Standard_B2ms Windows test-vm-XXXXX Succeeded 2

PS C:\> Get-AzVM -status
ResourceGroupName Name Location VmSize OsType NIC Provisioning Zone PowerState MaintenanceAllowed
—————– —- ——– —— —— — ———— —- ———- ——————
test-rg-01 test-vm-01 japaneast Standard_B2ms Windows test-vm-XXXXX Succeeded 2 VM deallocated
test-rg-01 test-vm-02 japaneast Standard_B2ms Windows test-vm-XXXXX Succeeded 2 VM deallocated

Get-AzVMコマンドは、リソースグループや仮想マシン名を指定して実行できます。

PS C:\> Get-AzVM -ResourceGroupName test-rg-01 -name test-vm-01
ResourceGroupName : test-rg-01
Id : /subscriptions/サブスクリプションID/resourceGroups/test-rg-01/providers/Microsoft.Compute/virtualMachines/test-vm-01
VmId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Name : test-vm-01
Type : Microsoft.Compute/virtualMachines
Location : japaneast
Tags : {}
DiagnosticsProfile : {BootDiagnostics}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
SecurityProfile : {UefiSettings, SecurityType}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks, DiskControllerType}
Zones : {1}
AdditionalCapabilities : {HibernationEnabled}
TimeCreated : 2023/11/XX 6:19:20

Format-List(fl)などを利用することで、仮想マシンの情報を詳細に表示できます。

Get-AzVMコマンドレットの詳細については、こちらで紹介しています。
仮想マシンのステータスの確認から、起動や停止までの方法を解説しています。
Azure CLIコマンドについても紹介しています。

仮想マシンのIP情報を取得する場合はGet-AzNetworkInterfaceを使う

仮想マシンのIP情報取得にはGet-AzNetworkInterfaceを使います。

Get-AzNetworkInterface

Get-AzVMコマンドレットの結果では、プライベートIPアドレスは確認できません。
NetworkProfileを確認しても、ネットワークインターフェースのIDしか表示されません。

PS C:\>Get-AzVM -ResourceGroupName test-rg-01 -name test-vm-01 | Format-Custom -Property NetworkProfile
class PSVirtualMachine
 {
  NetworkProfile =
   class NetworkProfile
    {
      NetworkInterfaces =
       [
        class NetworkInterfaceReference
        {
          Primary =
          DeleteOption = Delete
          Id = /subscriptions/(中略)/networkInterfaces/test-vm-xxxxxxx
         }
      ]

  NetworkApiVersion =
  NetworkInterfaceConfigurations =
 }
}

仮想マシンのプライベートIPアドレスは、ネットワークインターフェースのリソースで設定されています。
ネットワークインターフェースの詳細情報を取得するためには、Get-AzNetworkInterfaceコマンドを使用します。

Get-AzNetworkInterface

ネットワークインターフェースのリソース名やリソースIDを指定して確認できます。
実行結果から、接続されている仮想マシンを特定することも可能です。

PS C:\>Get-AzNetworkInterface -ResourceId /subscriptions/サブスクリプションID/resourceGroups/test-rg-01/providers/Microsoft.Network/networkInterfaces/test-vm-XXXXX |fl
IpConfigurationsText : [
{
“Name": “ipconfig1",
  “Etag": “W/\"XXXXXXXXXXXXXXXXXXXXXXXXX"",
  “Id": “/subscriptions/(中略)/test-vm-XXXXX/ipConfigurations/ipconfig1",
  “PrivateIpAddress": “10.0.1.4", #PrivateIPアドレスを確認できます
  “PrivateIpAllocationMethod": “Dynamic",
  “Subnet": {
  “Id": “/subscriptions/(中略)/subnets/private-subnet-01",
  “IpAllocations": []
 },
  “ProvisioningState": “Succeeded",
  “PrivateIpAddressVersion": “IPv4",
  “LoadBalancerBackendAddressPools": [],
  “LoadBalancerInboundNatRules": [],
  “Primary": true,
  “ApplicationGatewayBackendAddressPools": [],
  “ApplicationSecurityGroups": [],
  “VirtualNetworkTaps": []
 }
]

※仮想ネットワーク名やサブネット名なども確認できます。

Get-AzVMの結果からネットワークインターフェースのリソースIDを取得して表示することも可能です。
関連付けられている仮想マシンのリソースIDは、Get-AzNetworkInterfaceの実行結果のVirtualMachine項目で確認できます。

# Get-AzVMでネットワークインターフェースのリソースIDを取得してGet-AzNetworkInterfaceを実行
PS C:\> $vm = Get-AzVM -ResourceGroupName test-rg-01 -name test-vm-01
PS C:\> Get-AzNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces.Id |fl

# ネットワークインターフェースに関連付けされている仮想マシンのリソースIDの確認方法
PS C:\>
Get-AzNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces.Id |Format-Custom VirtualMachine
class PSNetworkInterface
 {
   VirtualMachine =
    class PSResourceId
    {
      Id = /subscriptions/(中略)virtualMachines/test-vm-01
     }
}

※ネットワークインターフェースが1つだけ設定されている場合の例です。

仮想マシンに接続されているマネージドディスクの詳細情報を取得する場合はGet-AzDiskを使う

仮想マシンに接続されているマネージドディスクの詳細情報取得にはGet-AzDiskを使います。

Get-AzDisk

Get-AzVMコマンドの結果では、ディスクの詳細情報は確認できません。
StorageProfile内にDiskSizeGBという項目がありますが、値は取得できません。

PS C:\> Get-AzVM -ResourceGroupName test-rg-01 -name test-vm-01 | Format-Custom -Property StorageProfile

OsDisk =
 class OSDisk
  {
   OsType = Windows
   EncryptionSettings =
   Name =test-vm-01_OsDisk_1_XXXXX
   Vhd =
   Image =
   Caching = ReadWrite
   WriteAcceleratorEnabled =
   DiffDiskSettings =
   CreateOption = FromImage
   DiskSizeGB = #項目はあるが値は取得されてない。
   ManagedDisk =
   class ManagedDiskParameters
 {
  StorageAccountType =
  DiskEncryptionSet =
  SecurityProfile =
  Id = /subscriptions/(中略)/disks/test-vm-01_OsDisk_1_XXXXX
 }
  DeleteOption = Delete
}

仮想マシンのマネージドディスクは、仮想マシンとは別のリソースです。
マネージドディスクの詳細情報を取得するためには、Get-AzDiskコマンドを使用します。

Get-AzDisk

先ほど確認したリソースIDを使って情報を取得できます。
実行結果から、接続されている仮想マシンを特定することも可能です。

PS C:\>Get-AzDisk -name test-vm-01_OsDisk_1_XXXXX

ResourceGroupName : test-rg-01
#ManagedByの項目で接続されている仮想マシン名が確認できます
ManagedBy : /subscriptions/(中略)/virtualMachines/test-vm-01
ManagedByExtended : {}
Sku : Microsoft.Azure.Management.Compute.Models.DiskSku
Zones : {1}
TimeCreated : 2023/11/xx 5:58:43
OsType : Windows
HyperVGeneration : V2
CreationData : Microsoft.Azure.Management.Compute.Models.CreationData
DiskSizeGB : 30 #マネージドディスクのサイズが確認できます
DiskSizeBytes : 32214351872 
UniqueId : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
EncryptionSettingsCollection :
ProvisioningState : Succeeded
DiskIOPSReadWrite : 500
DiskMBpsReadWrite : 60
DiskIOPSReadOnly :
DiskMBpsReadOnly :
DiskState : Reserved
Encryption : Microsoft.Azure.Management.Compute.Models.Encryption
MaxShares :
ShareInfo : {}
Id : /subscriptions/(中略)/disks/test-vm-01_OsDisk_1_XXXXX
Name : test-vm-01_OsDisk_1_XXXXX
Type : Microsoft.Compute/disks
Location : japaneast
~(以下略)~

※実行結果例はOSディスクの場合です。

Get-AzVMの結果から、マネージドディスクのリソース名を取得して表示することも可能です。

# Get-AzVMでマネージドディスクのリソースIDを取得してGet-AzDiskを実行

PS C:\> $vm = Get-AzVM -ResourceGroupName test-rg-01 -name test-vm-01
PS C:\> Get-AzDisk -name $vm.StorageProfile.OsDisk.Name

同じ実行結果

※OSディスクの場合は、vm.StorageProfile.OsDisk.Nameで取得できます。データディスクの場合は、vm.StorageProfile.DataDisks.Nameとなります。
※マネージドディスクが複数存在する場合は、$vm.StorageProfile.DataDisks[1].Nameのようにインデックスを指定すると、ディスク単位で取得できます。

—広告—

Azure PowerShellを使って仮想マシンの状態、ディスク、ネットワークインターフェース設定を一括取得

今回取得する仮想マシンの情報

仮想マシンの状態、マネージドディスク、ネットワークインターフェースに関する情報をまとめて取得します。

    • 取得情報
      • 仮想マシン名
      • 仮想マシンの状態(実行中や割り当て解除)
      • 仮想マシンのサイズ
      • ディスク名
      • ディスクサイズ
      • ストレージの種類(ディスク)
      • ネットワークインターフェース名
      • プライベートIPアドレス
      • プライベートIPアドレスの割り当て(静的IP、動的IP)

VmNameに仮想マシン名としてtest-vm-01、ResourceGroupNameにリソースグループ名としてtest-rg-01を指定しています。

Get-AzVMを使って仮想マシンのサイズや状態を取得

Get-AzVMで仮想マシン名やサイズを取得します。
Get-AzVM -Statusで仮想マシンの稼働状況を取得します。
Select-Objectで、それぞれの実行結果を組み合わせて表示します。

$VmName = “test-vm-01"
$ResourceGroupName = “test-rg-01"

$vm = Get-AzVM -ResourceGroupName $ResourceGroupName -name $VmName

Get-AzVm -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Status `
| Select-Object Name,@{n="Status"; e={$_.Statuses[1].Code}},@{n="VMSize"; e={$vm.HardwareProfile.VmSize}}

実行結果です。

Name Status VMSize
—- —— ——
test-vm-01 PowerState/deallocated Standard_B2ms

Get-AzNetworkInterfaceを使ってプライベートIPアドレスや割り当てを取得

Get-AzNetworkInterfaceで、すべてのネットワークインターフェースの情報を取得します。
Where { _.VirtualMachine.Id -contains VM.Id }として、仮想マシンのリソースIDを含むネットワークインターフェースのみを抽出しています。

※完全一致の場合は、-containsではなく-eq演算子を使用します。

$VmName = “test-vm-01"
$ResourceGroupName = “test-rg-01"

$vm = Get-AzVM -ResourceGroupName $ResourceGroupName -name $VmName

Get-AzNetworkInterface `
| Where { $_.VirtualMachine.id -contains $VM.id}`
| Select-Object @{n="NWInterFaceNmae"; e={$_.Name}},`
@{n="PrivateIP"; e={$_.IpConfigurations.PrivateIpAddress}},`
@{n="PrivateIpAllocation"; e={$_.IpConfigurations.PrivateIpAllocationMethod}}

実行結果です。

NWInterFaceNmae PrivateIP PrivateIpAllocation
————— ——— ——————-
test-vm-XXXXX 10.0.1.4 Dynamic

Get-AzDiskを使ってマネージドディスクのサイズやストレージの種類を取得

Get-AzDiskで、すべてのマネージドディスクの情報を取得します。
Where { _.ManagedBy -contains VM.Id }として、仮想マシンのリソースIDが関連付けられているマネージドディスクのみを抽出しています。

※完全一致の場合は、-containsではなく-eq演算子を使用します。

$VmName = “test-vm-01"
$ResourceGroupName = “test-rg-01"

$vm = Get-AzVM -ResourceGroupName $ResourceGroupName -name $VmName

Get-AzDisk -ResourceGroupName $vm.ResourceGroupName`
| Where { $_.ManagedBy -contains $VM.id }`
| Select-Object @{n="DiskNmae"; e={$_.Name}},DiskSizeGB,@{n="Tier"; e={$_.sku.Name}}

実行結果です。

DiskNmae DiskSizeGB Tier
——– ———- —-
test-vm-01-datadisk 4 StandardSSD_LRS
test-vm-01_OsDisk_1_XXXXX 30 StandardSSD_LRS

仮想マシン名とリソースグループを指定して情報を一括取得

仮想マシン名とリソースグループを指定して、設定情報をまとめて取得します。
Get-AzVM、Get-AzNetworkInterface、Get-AzDiskを組み合わせて取得しています。

$VmName = “test-vm-01"
$ResourceGroupName = “test-rg-01"

$vm = Get-AzVM -ResourceGroupName $ResourceGroupName -name $VmName

$GetVMInfo = Get-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Status `
| select-Object Name,@{n="Status"; e={$_.Statuses[1].Code}},@{n="VMSize"; e={$vm.HardwareProfile.VmSize}}

$GetNwInfo = Get-AzNetworkInterface `
| Where { $_.VirtualMachine.id -contains $VM.id}`
| Select-Object @{n="NWInterFaceNmae"; e={$_.Name}},`
@{n="PrivateIP"; e={$_.IpConfigurations.PrivateIpAddress}},`
@{n="PrivateIpAllocation"; e={$_.IpConfigurations.PrivateIpAllocationMethod}}

$GetDiskInfo = Get-AzDisk -ResourceGroupName $vm.ResourceGroupName`
| Where { $_.ManagedBy -contains $VM.id }`
| Select-Object @{n="DiskNmae"; e={$_.Name}},DiskSizeGB,@{n="Tier"; e={$_.sku.Name}}

Write-Output $GetVMInfo,$GetDiskInfo,$GetNwInfo |fl

Azure PowerShellを実行して仮想マシンの情報を一括取得

Azure PowerShellを実行して、仮想マシンの情報をまとめて取得した結果です。
複数設定されているマネージドディスクの情報も取得できています。

Name : test-vm-01
Status : PowerState/deallocated
VMSize : Standard_B2ms

DiskNmae : test-vm-01-datadisk
DiskSizeGB : 4
Tier : StandardSSD_LRS

DiskNmae : test-vm-01_OsDisk_1_XXXXX
DiskSizeGB : 30
Tier : StandardSSD_LRS

NWInterFaceNmae : test-vm-XXXXX
PrivateIP : 10.0.1.4
PrivateIpAllocation : Dynamic

—広告—

最後に

今回は、仮想マシンの設定を取得するAzure PowerShellについて確認しました。
Get-AzVM、Get-AzNetworkInterface、Get-AzDiskを利用することで、各種情報を取得できることが分かりました。
ネットワークインターフェースやマネージドディスクの設定には、関連付けられている仮想マシンのリソースIDが含まれている項目があります。
取得したリソースIDを使うことで、仮想マシンに関連したネットワークインターフェースやマネージドディスクの設定をまとめて抽出することができました。

引き続き、いろいろ試してみたいと思います。

Get-AzVMを使った仮想マシンの起動停止やステータス情報(電源状態)の確認については、こちらで紹介しています。

PowerShellを利用して仮想マシンの削除と一緒にネットワークインターフェースやディスクを削除する方法は、こちらで紹介しています。

スポンサーリンク