I use this code I use to report info for all LUNs, vmfs and rdm. It includes the host LUN number plus much more. I'm not sure how to get the runtime name yet, but I question the usefulness in this report since the runtime name can be different on each ESX Server. If you add runtime name, you'll have to show it for each ESX Server with access to the LUN.
$RDMs = @()
foreach($vm in (Get-View -ViewType "VirtualMachine")) {
foreach($dev in ($vm.Config.Hardware.Device | where {($_.gettype()).Name -eq "VirtualDisk"})) {
if(($dev.Backing.CompatibilityMode -eq "physicalMode") -or ($dev.Backing.CompatibilityMode -eq "virtualMode")) {
$objRdm = "" | select VMName, VMDK, UUID, DiskLabel, SCSIBus, SCSIDevice, Mode
$objRdm.VMName = $vm.Name
$objRdm.VMDK = $dev.Backing.FileName
$objRdm.UUID = $dev.Backing.LunUuid
$objRdm.DiskLabel = $dev.DeviceInfo.Label
$objRdm.SCSIBus = ( $vm.Config.Hardware.Device | ? { $_.Key -eq $dev.ControllerKey }).BusNumber
$objRdm.SCSIDevice = $dev.UnitNumber
$objRdm.Mode = $dev.Backing.CompatibilityMode
$RDMs += $objRdm
}
}
}
foreach ($cluster in (Get-View -ViewType "ClusterComputeResource")) {
$vmhostsview = $cluster.host | % { Get-View $_ }
$vmhostview = $vmhostsview | Select -first 1
$ScsiLuns = $vmhostsview | % { $_.Config.StorageDevice.ScsiLun } | Select -unique *
$UUIDs = $ScsiLuns | Select -unique UUID
$Datastores = $vmhostsview | % { $_.Config.FileSystemVolume.MountInfo } | % { $_.Volume } | Select -Unique *
$HostLUN = $vmhostsview | % { $_.Config.StorageDevice.ScsiTopology.Adapter } | % { $_.Target | % { $_.LUN } } | Select -unique *
foreach ($UUID in $UUIDs) {
$Lun = $ScsiLuns | ? { $_.UUID -eq $UUID.UUID } | Select -first 1
$objVolume = "" | Select Cluster, VolumeName, CanonicalName, DisplayName, VolumeType, CapacityGB, BlockSizeMb, VMFSVersion, LunType, Vendor, Model, HostLUN, VM, VMDiskLabel, VMSCSIBus, VMSCSIDevice, Revision, ScsiLevel, UUID
$objVolume.Cluster = $cluster.Name
$objVolume.CanonicalName = $Lun.CanonicalName
$objVolume.HostLUN = ($HostLUN | ? { $_.ScsiLun -eq $Lun.Key } | select -unique LUN).LUN
$objVolume.UUID = $Lun.Uuid
$objVolume.CapacityGB = $Lun.Capacity.Block * $Lun.Capacity.BlockSize / 1GB
$objVolume.DisplayName = $Lun.DisplayName
$objVolume.LunType = $Lun.LunType
$objVolume.Vendor = $Lun.Vendor
$objVolume.Model = $Lun.Model
$objVolume.Revision = $Lun.Revision
$objVolume.ScsiLevel = $Lun.ScsiLevel
foreach ($vol in $Datastores) {
if ($vol.extent | % { $_.diskname -eq $Lun.CanonicalName}) {
$objVolume.VolumeName = $vol.Name
$objVolume.BlockSizeMb = $vol.BlockSizeMb
$objVolume.VMFSVersion = $vol.Version
$objVolume.VolumeType = "vmfs"
}
}
foreach ($rdm in $RDMs) {
if ($Lun.Uuid -eq $rdm.UUID) {
$objVolume.VolumeName = $rdm.VMDK
$objVolume.VM = $rdm.VMName
$objVolume.VMDiskLabel = $rdm.DiskLabel
$objVolume.VMSCSIBus = $rdm.SCSIBus
$objVolume.VMSCSIDevice = $rdm.SCSIDevice
if ($rdm.Mode -eq "virtualMode" ) { $objVolume.VolumeType = "rdm" }
if ($rdm.Mode -eq "physicalMode") { $objVolume.VolumeType = "rdmp" }
}
}
$objVolume
}
}