VMware Cloud Community
ganapa2000
Hot Shot
Hot Shot
Jump to solution

Get-View : Cannot validate argument on parameter 'VIObject'. The argument is null

Hi,

I am unable to get Hostname, Canonical_Name, LUN, Console_Name as shows blank in the output csv file and below is the error

Please help...

Error:

Get-View : Cannot validate argument on parameter 'VIObject'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At D:\RDM_Attach\New\50_Export_RDM_node1.ps1:14 char:18
+  $esx = Get-View $vm1name.Runtime.Host
+                  ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-View], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,VMware.VimAutomation.ViCore.Cmdlets.Commands.DotNetInterop.GetVIView

Get-ScsiLun : Cannot validate argument on parameter 'VmHost'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At D:\RDM_Attach\New\50_Export_RDM_node1.ps1:23 char:29
+  $lun = Get-ScsiLun -VmHost ($esx).Name -CanonicalName $VirtualDisk.C ...
+                             ~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-ScsiLun], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,VMware.VimAutomation.ViCore.Cmdlets.Commands.Host.GetScsiLun

You cannot call a method on a null-valued expression.
At D:\RDM_Attach\New\50_Export_RDM_node1.ps1:24 char:2
+  $VirtualDisk.LUN = $lun.RuntimeName.SubString($lun.RuntimeName.LastI ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Get-View : Cannot validate argument on parameter 'VIObject'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At D:\RDM_Attach\New\50_Export_RDM_node1.ps1:14 char:18
+  $esx = Get-View $vm1name.Runtime.Host
+                  ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-View], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,VMware.VimAutomation.ViCore.Cmdlets.Commands.DotNetInterop.GetVIView

Get-ScsiLun : Cannot validate argument on parameter 'VmHost'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At D:\RDM_Attach\New\50_Export_RDM_node1.ps1:23 char:29
+  $lun = Get-ScsiLun -VmHost ($esx).Name -CanonicalName $VirtualDisk.C ...
+                             ~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-ScsiLun], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,VMware.VimAutomation.ViCore.Cmdlets.Commands.Host.GetScsiLun

You cannot call a method on a null-valued expression.
At D:\RDM_Attach\New\50_Export_RDM_node1.ps1:24 char:2
+  $VirtualDisk.LUN = $lun.RuntimeName.SubString($lun.RuntimeName.LastI ...
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    

Canonical_NameLUNConsole_Name
Reply
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

Try like this

$vm1name = Read-Host -Prompt "Name of the VM"

$out_csvpath = '.\diskmappings_node123.csv'


$vmview = Get-View -ViewType VirtualMachine -Filter @{'Name' = $vm1name }

$DiskInfo = @()

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 -and $_.Backing -is [VMware.Vim.VirtualDiskRawDiskMappingVer1BackingInfo] }))

   {

   $VirtualDisk = "" | Select VM, VM_Host, Disk_Size, Disk_Name, SCSI_Control, SCSI_ID, Disk_File, Disk_Type, Canonical_Name, LUN, Console_Name

   $VirtualDisk.VM = $vmview.name

   $esx = Get-View -Id $vmview.Runtime.Host

   $VirtualDisk.VM_Host = ($esx).Name

   $VirtualDisk.SCSI_Control = $VirtualSCSIController.DeviceInfo.Label

   $VirtualDisk.Disk_Name = $VirtualDiskDevice.DeviceInfo.Label

   $VirtualDisk.Disk_Type = $VirtualDiskDevice.backing

   $VirtualDisk.SCSI_ID = $VirtualDiskDevice.UnitNumber

   $VirtualDisk.Disk_File = $VirtualDiskDevice.Backing.FileName

   $VirtualDisk.Disk_Size = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB

   $VirtualDisk.Canonical_Name = ($esx.Config.StorageDevice.ScsiLun | where { $_.Uuid -eq $VirtualDiskDevice.Backing.LunUuid }).CanonicalName

   $lun = Get-ScsiLun -VmHost ($esx).Name -CanonicalName $VirtualDisk.Canonical_Name

   $VirtualDisk.LUN = $lun.RuntimeName.SubString($lun.RuntimeName.LastIndexof("L") + 1)

   $VirtualDisk.Console_Name = ($esx.Config.StorageDevice.ScsiLun | where { $_.Uuid -eq $VirtualDiskDevice.Backing.LunUuid }).ConsoleDeviceName

   $DiskInfo += $VirtualDisk

   }

}

$DiskInfo | Export-Csv -Path $out_csvpath -Delimiter "," -NoTypeInformation


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

View solution in original post

Reply
0 Kudos
7 Replies
LucD
Leadership
Leadership
Jump to solution

Try like this

$vm1name = Read-Host -Prompt "Name of the VM"

$out_csvpath = '.\diskmappings_node123.csv'


$vmview = Get-View -ViewType VirtualMachine -Filter @{'Name' = $vm1name }

$DiskInfo = @()

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 -and $_.Backing -is [VMware.Vim.VirtualDiskRawDiskMappingVer1BackingInfo] }))

   {

   $VirtualDisk = "" | Select VM, VM_Host, Disk_Size, Disk_Name, SCSI_Control, SCSI_ID, Disk_File, Disk_Type, Canonical_Name, LUN, Console_Name

   $VirtualDisk.VM = $vmview.name

   $esx = Get-View -Id $vmview.Runtime.Host

   $VirtualDisk.VM_Host = ($esx).Name

   $VirtualDisk.SCSI_Control = $VirtualSCSIController.DeviceInfo.Label

   $VirtualDisk.Disk_Name = $VirtualDiskDevice.DeviceInfo.Label

   $VirtualDisk.Disk_Type = $VirtualDiskDevice.backing

   $VirtualDisk.SCSI_ID = $VirtualDiskDevice.UnitNumber

   $VirtualDisk.Disk_File = $VirtualDiskDevice.Backing.FileName

   $VirtualDisk.Disk_Size = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB

   $VirtualDisk.Canonical_Name = ($esx.Config.StorageDevice.ScsiLun | where { $_.Uuid -eq $VirtualDiskDevice.Backing.LunUuid }).CanonicalName

   $lun = Get-ScsiLun -VmHost ($esx).Name -CanonicalName $VirtualDisk.Canonical_Name

   $VirtualDisk.LUN = $lun.RuntimeName.SubString($lun.RuntimeName.LastIndexof("L") + 1)

   $VirtualDisk.Console_Name = ($esx.Config.StorageDevice.ScsiLun | where { $_.Uuid -eq $VirtualDiskDevice.Backing.LunUuid }).ConsoleDeviceName

   $DiskInfo += $VirtualDisk

   }

}

$DiskInfo | Export-Csv -Path $out_csvpath -Delimiter "," -NoTypeInformation


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

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

LucD,

ConsoleDeviceName shows blank and I dont see any error in the output.

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

I don't see a ConsoleDeviceName property in there.


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

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

LucD,

$VirtualDisk.Console_Name = ($esx.Config.StorageDevice.ScsiLun | where { $_.Uuid -eq $VirtualDiskDevice.Backing.LunUuid }).ConsoleDeviceName

Not sure, why I am seeing the blank for this

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

Is this producing anything?
Can you check with

$esx.Config.StorageDevice.ScsiLun | where { $_.Uuid -eq $VirtualDiskDevice.Backing.LunUuid }


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

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

I see output for console name as VMware.Vim.HostScsiDisk

pastedImage_0.png

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

LucD,

I was able to fix by adding as below

$VirtualDisk.Console_Name = ($esx.Config.StorageDevice.ScsiLun | where { $_.Uuid -eq $VirtualDiskDevice.Backing.LunUuid }).DeviceName

Thanks for your help Smiley Happy

Reply
0 Kudos