※アフィリエイト広告を利用しています。

PowershellでAzureVMの設定情報をCSV取得する手順

Azure

はじめに

AzureVMのマシン情報(インスタンスタイプ、IPアドレス、ディスクサイズ等)をポータルから見るのがめんどくさい人向けです。Azure上で作成したVM情報をPowerShellを用いて出力する手順を本記事でまとめます。

Azureポータル上での作業

EntraIDアプリのAPIで取得します。設定手順は以下記事と同じ内容となってますのでそちらをご確認ください。

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取得する手順』でした。基本的なマシン情報はひとまず網羅できているのではと思います。

タイトルとURLをコピーしました