はじめに
AzureVMのマシン情報(インスタンスタイプ、IPアドレス、ディスクサイズ等)をポータルから見るのがめんどくさい人向けです。Azure上で作成したVM情報をPowerShellを用いて出力する手順を本記事でまとめます。
Azureポータル上での作業
EntraIDアプリのAPIで取得します。設定手順は以下記事と同じ内容となってますのでそちらをご確認ください。
参考記事
EntraIDアプリの設定とロールの割り当て箇所が該当します。
PowerShellの事前準備
AZモジュールのインストールが必要となります。
#ポリシーを変更
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
#AzurePowerShellをインストール
Install-Module -Name Az -Repository PSGallery -Force
各AzureVM情報をCSVで取得
#作成したアプリケーションID
$user = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
#クライアントシークレットの値、スクリプトに直接書き込むのが嫌な場合はパスワードファイルを
#準備することをお勧めします。
$password = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
#テナントID
$tenantId = "cccccccc-cccc-cccc-cccc-cccccccccccc"
#パスワードをセキュアな文字列に変換
$SecureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force
#接続情報作成
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$SecureStringPwd
#Azureに接続
Connect-AzAccount -ServicePrincipa -Credential $pscredential -Tenant $tenantId
#リソースグループに属するVM情報を取得
$resourceGroupName = "yourResourseGroupName"
$vms = Get-AzVM -ResourceGroupName $resourceGroupName
#CSVの配列を初期化
$csvDate = @()
#VM情報の必要取得
foreach($vm in $vms){
#静的IPアドレスの取得
$nicId = $vm.NetworkProfile.NetworkInterfaces[0].Id
$nicName = $nicId.Split('/')[-1]
$nic = Get-AzNetworkInterface -ResourceGroupName $resourceGroupName -Name $nicName
$ipConfigs = $nic.IpConfigurations | Select-Object -Property PrivateIpAddress
#OSの種類を取得
$licenseType = if($vm.LicenseType){
$vm.LicenseType
}else{"Linux"}
#インスタンスタイプの取得
$instanceType = $vm.HardwareProfile.VmSize
#仮想コア数の取得
$vmCores = (Get-AzVMSize -Location $vm.Location | Where-Object{$_.Name -eq $instanceType}).NumberOfCores
#メモリサイズの取得
$ramSize = (Get-AzVMSize -Location $vm.Location | Where-Object{$_.Name -eq $vm.HardwareProfile.VmSize}).MemoryInMB
#ディスク情報の取得
$disks = Get-AzDisk -ResourceGroupName $resourceGroupName | Where-Object{$_.ManagedBy -eq $vm.Id} | Select-Object -Property Name,DiskSizeGB
#ディスクのためのインデックス初期化
$diskIndex = 0
#ディスクの配列初期化
$diskName = @()
$diskSize = @()
foreach($disk in $disks){
$diskName += $disk.Name
$diskSize += $disk.DiskSizeGB
$diskIndex++
}
#CSVにデータを格納
foreach($ipConfig in $ipConfigs){
$csvDate += [PScustomObject]@{
VMName = $vm.Name
licenseType = $licenseType
instanceType = $instanceType
ipConfigs = $ipConfig.PrivateIpAddress
vmCores =$vmCores
RAMSize = $ramSize
#配列の長さが数値ge(以上)なら配列のインデックス番号に格納された値を格納。今回はDドライブまである前提
DiskName1 = if($diskName.Length -ge 1)
{$diskName[0]}else{$null}
DiskSize1 = if($diskSize.Length -ge 1)
{$diskSize[0]}else{$null}
DiskName2 = if($diskName.Length -ge 2)
{$diskName[1]}else{$null}
DiskSize2 = if($diskSize.Length -ge 2)
{$diskSize[1]}else{$null}
}
}
}
#CSV出力
$csvDate | Export-Csv -Path "yourDirectory" -NoTypeInformation
Disconnect-AzAccount
まとめ
以上で『PowershellでAzureVMの設定情報をCSV取得する手順』でした。基本的なマシン情報はひとまず網羅できているのではと思います。