Instead of looking at al the Harddisks at once, I would loop over the Harddisks.
Using a loop like this for example
The PipelineVariable parameter allows you to refer to the objects returned by Get-VM, via $vm, and Get-Harddisk, via $hd.
Also, note that the Get-View is not really needed, you can access the same properties via for example $vm.ExtensionData and $hd.ExtensionData