2

I am trying to get all data disks present on VM from Azure Resource Graph Query. I am able to get specific data disk by specifying the index( for example properties.storageProfile.dataDisks[0].name for first disk) but but how do I get this dynamically as some has more than 1 data disks. if VM has 3 disks, is it possible to get details and put it in new column with value as "disk1,disk2,disk3,etc". Using below I am able to extract first disk.

  resources
| where ['type'] == 'microsoft.compute/virtualmachines'
| extend DataDiskName = properties.storageProfile.dataDisks[0].name
| extend DataDiskSizeGB = properties.storageProfile.dataDisks[0].diskSizeGB
| extend DataDiskSizeType = properties.storageProfile.dataDisks[0].managedDisk.storageAccountType

1 Answers1

0
let resources = datatable(id:int,type:string,properties:dynamic)
[
    1 ,'microsoft.compute/virtualmachines', dynamic({"storageProfile":{"dataDisks":[{"name":"dd11","diskSizeGB":11,"managedDisk":{"storageAccountType":"sat11"}}]}})
   ,2 ,'microsoft.compute/virtualmachines', dynamic({"storageProfile":{"dataDisks":[{"name":"dd21","diskSizeGB":21,"managedDisk":{"storageAccountType":"sat21"}},{"name":"dd22","diskSizeGB":22,"managedDisk":{"storageAccountType":"sat22"}},{"name":"dd23","diskSizeGB":23,"managedDisk":{"storageAccountType":"sat23"}}]}})
   ,3 ,'microsoft.compute/virtualmachines', dynamic({"storageProfile":{"dataDisks":[{"name":"dd31","diskSizeGB":31,"managedDisk":{"storageAccountType":"sat31"}},{"name":"dd32","diskSizeGB":32,"managedDisk":{"storageAccountType":"sat32"}}]}})
];
resources
| where ['type'] == 'microsoft.compute/virtualmachines'
| mv-apply with_itemindex=i dd = properties.storageProfile.dataDisks on (summarize properties = make_bag(pack(strcat(i+1,"_name"),dd.name, strcat(i+1,"_diskSizeGB"),dd.diskSizeGB, strcat(i+1,"_storageAccountType"),dd.managedDisk.storageAccountType)))
| evaluate bag_unpack(properties)

enter image description here

Fiddle

David דודו Markovitz
  • 42,900
  • 6
  • 64
  • 88