Azure VMの状態、IPアドレス、ディスク設定をPowerShell使って取得

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

仮想マシン(Virtual Machine)のネットワークインターフェースやディスク(Managed Disks)設定をAzure PowerShell使って取得してみました。

    • Get-AzVMを使った仮想マシン(Azure VM)の設定取得
    • Get-AzNetworkInterfaceを使ったネットワークインターフェース設定取得
    • Get-AzDiskを使ったディスクディスク(Managed Disks)設定取得
    • 仮想マシン(Azure VM)の設定をAzure PowerShellで纏めて取得

仮想マシン(Virtual Machine)のプライベートIPアドレスやマネージドディスク(Managed Disks)のサイズやストレージの種類を取得しています。

スポンサーリンク

PowerShellを使って仮想マシン(Azure VM)の設定を取得

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

仮想マシン(Azure VM)の情報取得する為には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

Format-List(fl)等を利用すると各仮想マシン(Azure VM)の情報が表示されます。

Get-AzVMコマンドはリソースグループや仮想マシン(Azure VM)名を指定して実行出来ます。

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

-statusを指定すると仮想マシン(Azure VM)のステータス情報が取得出来ます。

PS C:\>Get-AzVM -ResourceGroupName test-rg-01 -name test-vm-01 -status

ResourceGroupName : test-rg-01
Name : test-vm-01
HyperVGeneration : V2
Disks[0] :
Name : test-vm-01_OsDisk_1_XXXXXXXXXXXXXXXXX
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Statuses[1] :
Code : PowerState/deallocated
Level : Info
DisplayStatus : VM deallocated

※コマンドレット実行結果は抜粋です。

Get-AzVMコマンドレットの詳細についてはこちらに纏めています。
仮想マシン(Azure VM)のステータスの確認から起動停止については纏めています。
Azure CLIでのコマンドも纏めています。

—広告—

仮想マシンのIP取得には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 =
 }
}

※実行結果の抜粋です。

仮想マシン(Azure VM)のプライベート IP アドレスはネットワークインターフェースのリソースで設定されています。
ネットワークインターフェースの詳細情報を取得する為にはGet-AzNetworkInterfaceを使います。
ネットワークインターフェースのリソース名やリソースIDを使用して確認する事が出来ます。
実行結果から接続されている仮想マシン(Azure VM)を特定する事も出来ます。

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を取得して表示する事も出来ます。
関連付けされている仮想マシン(Azure VM)のリソースIDはGet-AzNetworkInterface実行結果のVirtualMachineの項目でも確認出来ます。

#仮想マシン名から確認する場合はこのようなコマンドレットで実行出来ます。

PS C:\>$vm = Get-AzVM -ResourceGroupName test-rg-01 -name test-vm-01
PS C:\>Get-AzNetworkInterface -ResourceId $vm.NetworkProfile.NetworkInterfaces.Id |fl

同じ実行結果

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

※ネットワークインターフェースを複数設定している場合は修正が必要です。

マネージドディスクの情報取得には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
}

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

仮想マシン(Azure VM)のディスク(Managed Disks)は仮想マシン(Azure VM)と別リソースです。
ディスク(Managed Disks)の詳細情報を取得する為にはGet-AzDiskを使います。
先ほど確認したリソースIDを使用して確認してみます。(コマンド実行結果は抜粋です。)
実行結果から接続されている仮想マシン(Azure VM)を特定する事も出来ます。

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 #Diskサイズが確認出来る。
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
ExtendedLocation :
Tags : {}
NetworkAccessPolicy : AllowAll
DiskAccessId :
Tier :
BurstingEnabled :
PurchasePlan :
SupportsHibernation : True
SecurityProfile : Microsoft.Azure.Management.Compute.Models.DiskSecurityProfile
PublicNetworkAccess : Enabled
SupportedCapabilities : Microsoft.Azure.Management.Compute.Models.SupportedCapabilities
DataAccessAuthMode :
CompletionPercent : X

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

Get-AzVMの結果からディスク(Managed Disks)のリソース名を取得して表示する事も出来ます。

#仮想マシン名から確認する場合はこのようなコマンドレットで実行出来ます。

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

同じ実行結果

※OSディスクの場合です。データディスクのDataDisks.nameとなります。
※ディスク(Managed Disks)が複数存在する場合は$vm.StorageProfile.DataDisks[1].nameと指定するとディスク単位で取得出来ます。

—広告—

仮想マシン(Azure VM)の状態、ディスク、ネットワークインターフェース設定をPowerShellで纏めて取得

取得対象の仮想マシン(Azure VM)情報

指定した仮想マシン(Azure VM)の状態、ディスク(Managed Disks)、ネットワークインターフェースに関する情報を纏めて取得します。

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

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

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

Get-AzVMで仮想マシン名やサイズを取得しています。
Get-AzVM -StatusでVMの稼働状況を取得しています。
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}として仮想マシン(Azure VM)のリソースIDを含むネットワークインターフェースのみを抽出しています。

$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-AzNetworkInterfaceではすべてのディスク(Managed Disks)の情報を取得します。
Where { $_.ManagedBy -contains $VM.id }として仮想マシン(Azure VM)のリソースIDを含むディスク(Managed Disks)のみを抽出しています。

$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

仮想マシン(Azure VM)を指定して纏めて取得

仮想マシン(Azure VM)名とリソースグループを指定して設定を纏めて取得します。
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

取得結果

PowerShellを実行して仮想マシン(Azure VM)の纏めて取得した結果です。
複数設定したディスク(Managed Disks)の設定も取得出来ています。

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 VM)の設定を取得するAzure PowerShellについて確認してみました。
Get-AzVM、Get-AzNetworkInterface、Get-AzDiskを利用して取得出来る事が分かりました。
ネットワークインターフェースやディスク(Managed Disks)の設定には関連付けされている仮想マシン(Azure VM)のリソースIDが含まれている項目が含まれています。
リソースIDを使って仮想マシン(Azure VM)に関連したネットワークインターフェースやディスク(Managed Disks)の設定を抽出する事が出来ました。

今後も引き続き色々試してみたいと思います。

Get-AzVMを使った仮想マシンの起動停止やステータス情報(電源状態)の確認についてはこちらで纏めてます。
併せて見て頂けますと有難いです。

仮想マシン(Azure VM)の削除と一緒にネットワークインターフェースやディスクをPowerShellを使って削除する方法はこちらに纏めています。

スポンサーリンク