PowerCLI: Getting LUN paths when using EMC PowerPath/VE

A few weeks back I wanted to verify some path counts per LUN. This is typically pretty easy and something that can be written as a one liner using standard PowerCLI cmdlets as such:

Get-VMHost | Get-ScsiLun | Get-ScsiLunPath

However, the above command wouldn’t return results in the customer environment. After doing some testing, I realized that the issue was likely related to the presence of EMC PowerPath/VE for multipathing on the hosts. When using the GUI to view storage/LUN properties other details like Path Selection Plugin (PSP) is also missing… but the path information I wanted was still available. It took a little bit of poking around in the Get-View output, but I was able to come up with something to get me the data I was looking for. Its not real pretty, but it is fast and helped me answer a couple questions. I figured I would share the code here here in case anyone else runs into this issue. If you have any comments/suggestions on how to make this code better/more complete please post them in the comments section.

[cc lang=”PowerShell”]
$dsHt = Get-View -ViewType Datastore -Property “Info”,”Summary.Type” -Filter @{“Summary.Type”=”VMFS”} |
Select @{N=”DSName”;E={$_.Info.Vmfs.Name}}, @{N=”Capacity”;E={[math]::round( ($_.Info.Vmfs.Capacity / 1024 / 1024), 0)}},
@{N=”Extent”;E={$_.Info.Vmfs.Extent[0].DiskName}}, @{N=”VMFS Version”;E={$_.Info.Vmfs.Version}} |
Group-Object “Extent” -AsHashTable -AsString

$results = @()
Get-View -ViewType HostSystem -SearchRoot (Get-Cluster ClusterPod8).id -Property Name, Config.StorageDevice | %{
$thisHostName = $_.Name
$_.Config.StorageDevice.PlugStoreTopology.path | ?{$_.Name -match ‘naa’} | Group-Object LunNumber | Sort-object Name | %{
try {
$thisNaaId = ($_.Group[0].Name -split “naa.”)[1]
$results += New-Object psobject -Property @{
HostName = $thisHostName
LunNumber = $_.Name
PathCount = $_.Count
DSName = $dsHt[“naa.$thisNaaId”][0].DSName
Capacity = $dsHt[“naa.$thisNaaId”][0].Capacity
“VMFS Version” = $dsHt[“naa.$thisNaaId”][0].”VMFS Version”
}
} catch {
Write-Warning “Found something with $thisNaaId”
}
} # end this Lun
} # end this host

$results |Group-Object pathcount
[/cc]

This entry was posted in Scripting, Virtualization. Bookmark the permalink.

One Response to PowerCLI: Getting LUN paths when using EMC PowerPath/VE

  1. Rover says:

    Hi,

    Is it possible to get the lunpath state(active or dead) to include in the same script.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Notify me of followup comments via e-mail. You can also subscribe without commenting.