Count LUN Paths of each Datastore

Lately, we had multiple changes in our environments. A lot of them were related to zoning or storage provisioning. It annoyed me to check all Hosts whether als Paths are up or not. So I decided to write a Script, which runs through the vCenter and grabs all hosts, their mounted Datastores and the number of Paths to it.
Remember, before you run the script, you need to connect to vcenters.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## Connect to vCenter Server
Connect-VIServer -Server <vcenter>
## Connect to vCenter Server Connect-VIServer -Server <vcenter>
## Connect to vCenter Server 
Connect-VIServer -Server <vcenter>

After establishing connection, you can run the following script:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## Get all Hosts from connected VIServers
$esxi_list = Get-VMhost
foreach ($esxi in $esxi_list) {
## Get List of all Datastores connected to this host
$datastore_list = Get-VMHost -Name $esxi | Get-Datastore | Where-Object {$_.ExtensionData.Info.GetType().Name -eq "VmfsDatastoreInfo"}
## Get ESXi-CLI $esxcli = Get-ESXCLI -VMHost $esxi -V2
foreach ($datastore in $datastore_list) {
## Get NAA for Datastore
$datastore_canonical = $datastore.ExtensionData.Info.Vmfs.Extent
## Get All Paths to current Datastore (across both vmhba)
$paths = $esxcli.storage.core.path.list.invoke() | Where-Object Device -eq $datastore_canonical.DiskName
## Create Object for Output
New-Object PSObject -Property @{ Paths = $paths.Count Host = $esxi.name Datastore = $datastore NAA = $datastore_canonical }
}
}
## Get all Hosts from connected VIServers $esxi_list = Get-VMhost foreach ($esxi in $esxi_list) { ## Get List of all Datastores connected to this host $datastore_list = Get-VMHost -Name $esxi | Get-Datastore | Where-Object {$_.ExtensionData.Info.GetType().Name -eq "VmfsDatastoreInfo"} ## Get ESXi-CLI $esxcli = Get-ESXCLI -VMHost $esxi -V2 foreach ($datastore in $datastore_list) { ## Get NAA for Datastore $datastore_canonical = $datastore.ExtensionData.Info.Vmfs.Extent ## Get All Paths to current Datastore (across both vmhba) $paths = $esxcli.storage.core.path.list.invoke() | Where-Object Device -eq $datastore_canonical.DiskName ## Create Object for Output New-Object PSObject -Property @{ Paths = $paths.Count Host = $esxi.name Datastore = $datastore NAA = $datastore_canonical } } }
## Get all Hosts from connected VIServers 
$esxi_list = Get-VMhost 
foreach ($esxi in $esxi_list) { 
	## Get List of all Datastores connected to this host 
	$datastore_list = Get-VMHost -Name $esxi | Get-Datastore | Where-Object {$_.ExtensionData.Info.GetType().Name -eq "VmfsDatastoreInfo"} 
	## Get ESXi-CLI $esxcli = Get-ESXCLI -VMHost $esxi -V2 
	foreach ($datastore in $datastore_list) { 
		## Get NAA for Datastore 
		$datastore_canonical = $datastore.ExtensionData.Info.Vmfs.Extent 
		## Get All Paths to current Datastore (across both vmhba) 
		$paths = $esxcli.storage.core.path.list.invoke() | Where-Object Device -eq $datastore_canonical.DiskName 
		## Create Object for Output 
		New-Object PSObject -Property @{ Paths = $paths.Count Host = $esxi.name Datastore = $datastore NAA = $datastore_canonical } 
	} 
}

Leave a Reply

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