VMware Cloud Community
ganapa2000
Hot Shot
Hot Shot
Jump to solution

Issue getting Vendor details

Hi,

I am having issue getting vendor details for the volumes as it showing the same vendor name for all the disks instead of its respective vendor name. we have presented the RDM disks from two storage one is Pure and another is Nimble, for all the disks, it showing Vendor as Pure only 😞

Please help

$DiskInfo= @()
foreach ($VMview in Get-VM mysql03 | Get-View){
foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | where {$_.DeviceInfo.Label -match "SCSI Controller"})) {
foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | where {$_.ControllerKey -eq $VirtualSCSIController.Key})) {
$VirtualDisk = "" | Select VMname, SCSIController, DiskName, SCSI_ID, DeviceName, DiskFile, DiskSize, Vendor
$VirtualDisk.VMname = $VMview.Name
$VirtualDisk.SCSIController = $VirtualSCSIController.DeviceInfo.Label
$VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label
$VirtualDisk.SCSI_ID = "$($VirtualSCSIController.BusNumber) : $($VirtualDiskDevice.UnitNumber)"
#$VirtualDisk.DeviceName = $VirtualDiskDevice.Backing.DeviceName.substring(22) -replace ".{12}$"
#$VirtualDisk.DeviceName = $VirtualDiskDevice.Backing.DeviceName.substring(22,24).ToUpper()
$VirtualDisk.DeviceName = $VirtualDiskDevice.Backing.DeviceName.Where{$_ -ne ''} | %{$_.Substring(22,24).ToUpper()}
$VirtualDisk.DiskFile = $VirtualDiskDevice.Backing.FileName
$VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB
$esxcli = Get-EsxCli -VMHost (Get-View -Id $VMview.Runtime.Host -Property Name).Name -V2
$ds = Get-View -Id $VirtualDiskDevice.Backing.Datastore
$VirtualDisk.Vendor = $esxcli.storage.core.device.list.Invoke(@{device = $ds.Info.Vmfs.Extent[0].DiskName }).Vendor
$DiskInfo += $VirtualDisk
}}}
$DiskInfo | Sort VMname, SCSI_ID | ft -auto

Reply
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

You can try something like this

$DiskInfo = @()
foreach ($VMview in Get-VM mysql03 | Get-View) {
  foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | Where-Object { $_.DeviceInfo.Label -match "SCSI Controller" })) {
    foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | Where-Object { $_.ControllerKey -eq $VirtualSCSIController.Key })) {
      $VirtualDisk = "" | Select-Object VMname, SCSIController, DiskName, SCSI_ID, DeviceName, DiskFile, DiskSize, Vendor
      $VirtualDisk.VMname = $VMview.Name
      $VirtualDisk.SCSIController = $VirtualSCSIController.DeviceInfo.Label
      $VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label
      $VirtualDisk.SCSI_ID = "$($VirtualSCSIController.BusNumber) : $($VirtualDiskDevice.UnitNumber)"
      $VirtualDisk.DeviceName = $VirtualDiskDevice.Backing.DeviceName.Where{ $_ -ne '' } | ForEach-Object { $_.Substring(22, 24).ToUpper() }
      $VirtualDisk.DiskFile = $VirtualDiskDevice.Backing.FileName
      $VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB
      $esxcli = Get-EsxCli -VMHost (Get-View -Id $VMview.Runtime.Host -Property Name).Name -V2
      if ($VirtualDiskDevice.Backing.CompatibilityMode -in 'physicalMode','virtualmode'){
        $devName = $VirtualDiskDevice.Backing.DeviceName
      }
      else{
        $ds = Get-View -Id $VirtualDiskDevice.Backing.Datastore
        $devName = $ds.Info.Vmfs.Extent[0].DiskName
      }
      $VirtualDisk.Vendor = $esxcli.storage.core.device.list.Invoke(@{device = $devName}).Vendor
      $DiskInfo += $VirtualDisk
    }
  }
}
$DiskInfo | Sort-Object VMname, SCSI_ID | Format-Table -auto

On a side note, this will not work when using VSAN.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

4 Replies
LucD
Leadership
Leadership
Jump to solution

The script is using the datastore on which the VMDK is sitting, to determine the Vendor.
Is the Datastore part in the DiskFile property the same or different?

Update: this snippet does not take RDMs into account.
It looks at the header VMDK datastore, not the RDM LUN, to determine the vendor.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

LucD,

Is there a way to get the details of the RDM from the above script based on the device name?

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

You can try something like this

$DiskInfo = @()
foreach ($VMview in Get-VM mysql03 | Get-View) {
  foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | Where-Object { $_.DeviceInfo.Label -match "SCSI Controller" })) {
    foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | Where-Object { $_.ControllerKey -eq $VirtualSCSIController.Key })) {
      $VirtualDisk = "" | Select-Object VMname, SCSIController, DiskName, SCSI_ID, DeviceName, DiskFile, DiskSize, Vendor
      $VirtualDisk.VMname = $VMview.Name
      $VirtualDisk.SCSIController = $VirtualSCSIController.DeviceInfo.Label
      $VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label
      $VirtualDisk.SCSI_ID = "$($VirtualSCSIController.BusNumber) : $($VirtualDiskDevice.UnitNumber)"
      $VirtualDisk.DeviceName = $VirtualDiskDevice.Backing.DeviceName.Where{ $_ -ne '' } | ForEach-Object { $_.Substring(22, 24).ToUpper() }
      $VirtualDisk.DiskFile = $VirtualDiskDevice.Backing.FileName
      $VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB
      $esxcli = Get-EsxCli -VMHost (Get-View -Id $VMview.Runtime.Host -Property Name).Name -V2
      if ($VirtualDiskDevice.Backing.CompatibilityMode -in 'physicalMode','virtualmode'){
        $devName = $VirtualDiskDevice.Backing.DeviceName
      }
      else{
        $ds = Get-View -Id $VirtualDiskDevice.Backing.Datastore
        $devName = $ds.Info.Vmfs.Extent[0].DiskName
      }
      $VirtualDisk.Vendor = $esxcli.storage.core.device.list.Invoke(@{device = $devName}).Vendor
      $DiskInfo += $VirtualDisk
    }
  }
}
$DiskInfo | Sort-Object VMname, SCSI_ID | Format-Table -auto

On a side note, this will not work when using VSAN.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

ganapa2000
Hot Shot
Hot Shot
Jump to solution

ok got it...That worked perfectly now

Thank you very much 🙂

 

Reply
0 Kudos