PowerShellを使ってAzure VMの稼働ステータスやIPアドレス、ディスク情報を纏めて取得

Azure,PowerShell/Azure CLI,Virtual Machine

PowerShellを使って仮想マシン(Virtual Machine)の設定を纏めて取得する事に挑戦してみました。
今回は仮想マシンのステータスだけではなくローカルIPやマネージドディスクのサイズ情報なども併せて取得してみました。

スポンサーリンク

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

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

仮想マシンの情報取得する為にはGet-AzVMコマンドを使います。
実際にコマンドを実行すると仮想マシンのリソースグループや場所が表示されます。
-statusオプションをつけると仮想マシンのステータス(電源状態)も確認する事が出来ます。

PS C:\> Get-AzVM

ResourceGroupName Name Location VmSize OsType NIC ProvisioningState Zone
—————– —- ——– —— —— — —————– —-
 TEST-RG-01 TEST-VM-01 westus2 Standard_D2as_v5 Windows test-vm-XXXXX Succeeded

PS C:\> Get-AzVM -status

ResourceGroupName Name Location VmSize OsType NIC Provisioning Zone PowerState MaintenanceAllowed
—————– —- ——– —— —— — ———— —- ———- ——————
TEST-RG-01 TEST-VM-01 westus2 Standard_D2as_v5 Windows test-vm-XXXXX  Succeeded 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 : westus2
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}

-statusを指定すると仮想マシンのステータス情報が取得出来ます。(コマンド実行結果は抜粋です。)

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を使った仮想マシンのステータス情報(電源状態)の確認についてはこちらを参照願います。

PowerShellで入れ子になったプロファイル表示する方法についてはこちらを参照願います。


仮想マシンのIP取得にはGet-AzNetworkInterfaceを使う

Get-AzVMコマンドの結果を見てもIPアドレスは確認出来ません。
NetworkProfile内を確認してもネットワークインターフェースのidのみしか確認出来ません。

PS C:\>Get-AzVM -ResourceGroupName TEST-RG-01 -name TEST-VM-01 | Format-Custom -Property NetworkProfile
(~中略~)
Id = /subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Network/networkInterfaces/test-vm-XXXXX

これは仮想マシンのIPはネットワークインターフェースで設定されている為になります。
ネットワークインターフェースの詳細情報を取得する為にはGet-AzNetworkInterfaceを使います。
先ほど確認したリソースIDを使用して確認してみます。(コマンド実行結果は抜粋です。)

PS C:\>Get-AzNetworkInterface -ResourceId /subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Network/networkInterfaces/test-vm-XXXXX

Name : test-vm-XXXXX
ResourceGroupName : Test-RG-01
Location : westus2
Id : /subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Network/networkInterfaces/test-vm-XXXXX

VirtualMachine : {
“Id": “/subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Compute/virtualMachines/TEST-VM-01"
}
IpConfigurations : [
{
“Name": “ipconfig1",
“Id": “/subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Network/networkInterfaces/test-vm-XXXXX/ipConfigurations/ipconfig1",
“PrivateIpAddress": “10.2.0.4",
“PrivateIpAllocationMethod": “Dynamic",

仮想マシンのローカルIPが取得出来る事が分かりました。

マネージドディスクの情報取得にはGet-AzDiskを使う

Get-AzVMコマンドの結果を見てもディスクの詳細情報は確認出来ません。
NetworkProfile内を確認してもネットワークインターフェースのidのみしか確認出来ません。

PS C:\>Get-AzVM -ResourceGroupName TEST-RG-01 -name TEST-VM-01 | Format-Custom -Property StorageProfile

Name = TEST-VM-01_OsDisk_1_XXXXXXXXXXXXXXXXX
DiskSizeGB =
ManagedDisk =
Id = /subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Compute/disks/TEST-VM-01_OsDisk_1_XXXXXXXXXXXXXXXXX

これは仮想マシンのディスクはマネージドディスクで設定されている為になります。
マネージドディスクの詳細情報を取得する為にはGet-AzDiskを使います。
先ほど確認したリソースIDを使用して確認してみます。(コマンド実行結果は抜粋です。)

PS C:\>Get-AzDisk -name TEST-VM-01_OsDisk_1_XXXXXXXXXXXXXXXXX

ResourceGroupName : TEST-RG-01
ManagedBy : /subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Compute/virtualMachines/TEST-VM-01
Sku : Microsoft.Azure.Management.Compute.Models.DiskSku
DiskSizeGB : 30
Id : /subscriptions/サブスクリプションID/resourceGroups/TEST-RG-01/providers/Microsoft.Compute/disks/TEST-VM-01_OsDisk_1_XXXXXXXXXXXXXXXXX
Name : TEST-VM-01_OsDisk_1_XXXXXXXXXXXXXXXXX

仮想マシンのディスクサイズが分かりました。

PowerShellを使って仮想マシンの情報を纏めて取得

今回取得した仮想マシン情報

今回は指定したVMについて稼働状況、DISK情報、ネットワークインターフェースに関する情報を取得してみました。

    • 取得した情報
      • Virtual Machine名
      • PowerState
      • VMSize
      • DISK名
      • DISKサイズ
      • DSIKのTier
      • Network Interface名
      • Private IP Address
      • 静的IP or 動的IP

仮想マシンの情報を纏めて取得するPowerShell

最初にGet-AzVMを使って仮想マシン情報を取得しVMのリソースIDを特定します。
マネージドディスクもネットワークインターフェースの設定情報にはアタッチされている仮想マシンのリソースIDが含まれます。
仮想マシンのリソースIDとにアタッチされているリソースIDが合致するマネージドディスクやネットワークインターフェース設定情報を取得します。

Get-AzVMコマンドでは-StatusオプションでVMの稼働状況を取得しています。
但しGet-AzVMコマンド-StatusオプションをつけるとVmSizeが取得出来ません。
VmSizeの方は@{n="VMSize"; e={$vm.HardwareProfile.VmSize}}とし、-Status無しの結果から値を取得しています。

#VMの情報を取得するPowerShell(基本編)
#VM名を指定して、IF名、IP、DISK名、サイズ、SKU等を取得
#パラメータ指定

param (
    [String] [Parameter(Mandatory=$true)] $VMName
    )

# VM Status 取得
$vm = Get-AzVM -name $VMName

# サブスクリプションID指定(任意)
$SubscriptionId =“サブスクリプションID"
Select-AzSubscription -SubscriptionId $SubscriptionId 

# VMの各情報を取得
Get-AzVm -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Status `
| select-Object Name,@{n="Status"; e={$_.Statuses[1].Code}},@{n="VMSize"; e={$vm.HardwareProfile.VmSize}}
& `
Get-AzDisk -ResourceGroupName $vm.ResourceGroupName`
| Where { $_.ManagedBy -contains $VM.id }`
| Select-Object @{n="DiskNmae"; e={$_.Name}},DiskSizeGB,@{n="Tier"; e={$_.sku.Name}}
& `
Get-AzNetworkInterface `
| Where { $_.VirtualMachine.id -contains $VM.id}`
| Select-Object @{n="NWInterFaceNmae"; e={$_.Name}},`
@{n="PrivateIP"; e={$_.IpConfigurations.PrivateIpAddress}},`
@{n="PrivateIpAllocation"; e={$_.IpConfigurations.PrivateIpAllocationMethod}}

※Select-AzSubscriptionは任意で利用します。サブスクリプションIDの指定をしないと情報取得出来ないケースは使います。

Azure VMの稼働ステータスやIPアドレス、ディスクの情報の取得結果

PowerShellを実行して仮想マシンの情報を取得してみます。ディスクを2本ついた仮想マシンで取得してみた結果です。(上記で実施したVMとは別のものとなります。)

PS> c:\PowerShell\VMの情報を取得する(基本編)(公開用).ps1 -VMname VM名

Name : VM名
Status : PowerState/running
VMSize : Standard_B1ms

DiskNmae : OSディスク名
DiskSizeGB : 30
Tier : Standard_LRS

DiskNmae : データDISK名
DiskSizeGB : 30
Tier : StandardSSD_LRS

NWInterFaceNmae : ネットワークインターフェース名
PrivateIP : PrivateIP
PrivateIpAllocation : Static

今後も引き続き改善していきたいと思います。
Get-Azvmで仮想マシンのサイズを取得するという基本的な部分はこちらで試しております。

Azure VMの削除と一緒にネットワークインターフェースやディスクを削除するのはこちらで試しております。