I have the following report but i'd like to get the display name
$viservers = "vCenter.domain.net"$HBAreport = @()foreach ($singleViserver in $viservers){Connect-VIServer $singleViserver -user USERNAME -password 'PASSWORD'foreach ($VMHost in Get-VMhost) {foreach ($lun in ($VMHost.ExtensionData.config.storageDevice.multipathInfo.lun)){$Report = "" | select Name, LunID, satpPolicy, pspPolicy, Paths$Report.Name = $VMHost$Report.LunID = $lun.Id$Report.satpPolicy = $lun.storageArrayTypePolicy.Policy$Report.pspPolicy = $lun.Policy.Policy$Report.Paths = $lun.Path.Count$HBAreport += $Report$print = $Report}}$HBAreport | export-csv .\LUNpolicy.csv -NoTypeInformation}
Unless LucD answers to your question directly, take a look at his posts at Re: Get HBA devices/paths list with Powercli
André
or how can i add disk pathing policy to this script? this one actually does eveything i need except storage array policy... but the first one does that but I can't seem to get it to pull in this one.
$viservers = "vCenter.domain.net"$HBAreport = @()foreach ($singleViserver in $viservers){Connect-VIServer $singleViserver -user USERRNAME -password 'PASSWORD'foreach ($VMHost in Get-VMhost) {foreach ($lun in ($VMHost | Get-SCSIlun -CanonicalName "*naa.60*")){$id = $lun.CanonicalNameforeach($ds in (Get-VMHost $VMHost | Get-Datastore | where{$_.Type -eq "vmfs"} | Get-View)){$ds.Info.Vmfs.Extent | %{if($_.DiskName -eq $id){$Details = "" | Select Host, Datastore, CanonicalName, PSPPolicy$Details.Host = $VMhost$Details.Datastore = $ds.Info.Name$Details.CanonicalName = $lun.CanonicalName$Details.PSPPolicy = $lun.MultipathPolicy$Details.PSTypeNames.Clear()$Details$HBAreport += $Details}}}}}}$HBAreport | export-csv .\LUNpolicy.csv -NoTypeInformation
Try it like this
$viservers = "vCenter.domain.net"
$HBAreport = @() foreach ($singleViserver in $viservers) { Connect-VIServer $singleViserver -user USERRNAME -password 'PASSWORD'
foreach ($VMHost in Get-VMhost) { foreach ($lun in ($VMHost | Get-SCSIlun -CanonicalName "*naa.60*")){ $id = $lun.CanonicalName foreach($ds in (Get-Datastore -VMHost $VMHost | where{$_.Type -eq "vmfs"})){ $ds.Extensiondata.Info.Vmfs.Extent | %{ if($_.DiskName -eq $id){ $Details = "" | Select Host, Datastore, CanonicalName, PSPPolicy, ArrayPolicy
$Details.Host = $VMhost
$Details.Datastore = $ds.Name $Details.CanonicalName = $lun.CanonicalName $Details.PSPPolicy = $lun.MultipathPolicy $Details.ArrayPolicy = ($VMHost.ExtensionData.Config.StorageDevice.MultipathInfo.Lun | where {$_.Lun -eq $lun.ExtensionData.Key}).StorageArrayTypePolicy.Policy $HBAreport += $Details } } } } } } $HBAreport | export-csv .\LUNpolicy.csv -NoTypeInformation
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
So that works and I've added ArrayPolicy and Path Count. I also added a print statement so i could see if it was working as it went along. question, is this the most efficient way to code this script? it seems very slow.
$viservers = "vCenter.domain.net" $HBAreport = @() foreach ($singleViserver in $viservers) { Connect-VIServer $singleViserver -user USERNAME -password 'PASSWORD' foreach ($VMHost in Get-VMhost) { foreach ($lun in ($VMHost | Get-SCSIlun -CanonicalName "*naa.60*")){ $id = $lun.CanonicalName foreach($ds in (Get-Datastore -VMHost $VMHost | where{$_.Type -eq "vmfs"})){ $ds.Extensiondata.Info.Vmfs.Extent | %{ if($_.DiskName -eq $id){ $Details = "" | Select Host, Datastore, CanonicalName, PSPPolicy, ArrayPolicy, Paths
$Details.Host = $VMhost
$Details.Datastore = $ds.Name $Details.CanonicalName = $lun.CanonicalName $Details.PSPPolicy = $lun.MultipathPolicy $Details.ArrayPolicy = ($VMHost.ExtensionData.Config.StorageDevice.MultipathInfo.Lun | where {$_.Lun -eq $lun.ExtensionData.Key}).StorageArrayTypePolicy.Policy $Details.Paths = ($VMHost.ExtensionData.Config.StorageDevice.MultipathInfo.Lun | where {$_.Lun -eq $lun.ExtensionData.Key}).Path.Count $HBAreport += $Details $print = $Details} } } } $print } } $HBAreport | export-csv .\LUNpolicy.csv -NoTypeInformation