<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://vwiki.co.uk/index.php?action=history&amp;feed=atom&amp;title=PS_DS-LUN-v4.ps1</id>
	<title>PS DS-LUN-v4.ps1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://vwiki.co.uk/index.php?action=history&amp;feed=atom&amp;title=PS_DS-LUN-v4.ps1"/>
	<link rel="alternate" type="text/html" href="http://vwiki.co.uk/index.php?title=PS_DS-LUN-v4.ps1&amp;action=history"/>
	<updated>2026-04-19T06:53:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://vwiki.co.uk/index.php?title=PS_DS-LUN-v4.ps1&amp;diff=1831&amp;oldid=prev</id>
		<title>Sstrutt: Re-orged categories</title>
		<link rel="alternate" type="text/html" href="http://vwiki.co.uk/index.php?title=PS_DS-LUN-v4.ps1&amp;diff=1831&amp;oldid=prev"/>
		<updated>2012-04-18T13:55:12Z</updated>

		<summary type="html">&lt;p&gt;Re-orged categories&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:55, 18 April 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l135&quot;&gt;Line 135:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 135:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;VMware]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;PowerCLI_Script&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:PowerShell]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:PowerCLI&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sstrutt</name></author>
	</entry>
	<entry>
		<id>http://vwiki.co.uk/index.php?title=PS_DS-LUN-v4.ps1&amp;diff=1239&amp;oldid=prev</id>
		<title>Sstrutt: Initial creation</title>
		<link rel="alternate" type="text/html" href="http://vwiki.co.uk/index.php?title=PS_DS-LUN-v4.ps1&amp;diff=1239&amp;oldid=prev"/>
		<updated>2011-03-21T18:17:28Z</updated>

		<summary type="html">&lt;p&gt;Initial creation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# ======================================================&lt;br /&gt;
# Datastore and LUN Enumerator&lt;br /&gt;
# ======================================================&lt;br /&gt;
# Simon Strutt        Nov 2010&lt;br /&gt;
# ======================================================&lt;br /&gt;
#&lt;br /&gt;
# ESX v3 &lt;br /&gt;
# Thieved and adapted from the good work by catman...&lt;br /&gt;
# http://communities.vmware.com/thread/240466&lt;br /&gt;
#&lt;br /&gt;
# ESX v4&lt;br /&gt;
# Thieved and adapted from the good work by notorious_bdg...&lt;br /&gt;
# http://communities.vmware.com/thread/171214&lt;br /&gt;
#&lt;br /&gt;
# Version 3 - Nov 2010&lt;br /&gt;
# - Enumerate for a VC (rather than just an ESX)&lt;br /&gt;
#&lt;br /&gt;
# Version 4 - Nov 2010&lt;br /&gt;
# - Added handling for ESX v4&lt;br /&gt;
#&lt;br /&gt;
# TO DO...&lt;br /&gt;
# - Get-DS-LUNs assumes all ESX&amp;#039;s connected to a VC are same version, resolve&lt;br /&gt;
#&lt;br /&gt;
# ======================================================&lt;br /&gt;
&lt;br /&gt;
function Get-DS-LUNs ($objESXs) {&lt;br /&gt;
    $esx = $objESXs | Select -First 1&lt;br /&gt;
    if (($esx.Version) -ge 4) {&lt;br /&gt;
        Get-DS-LUNs-v4&lt;br /&gt;
    } else {&lt;br /&gt;
        Get-DS-LUNs-v3 ($objESXs)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Get-DS-LUNs-v3 ($objESXs) {&lt;br /&gt;
    $results = @()&lt;br /&gt;
    foreach ($objESX in $objESXs) {&lt;br /&gt;
        #Write-Host &amp;quot;Checking datastores on &amp;quot; $objESX.Name&lt;br /&gt;
&lt;br /&gt;
        # Get .NET views for host and storage system&lt;br /&gt;
        $objViewESX = Get-View -id $objESX.id&lt;br /&gt;
        $objViewESXstorageSys = Get-View -id $objViewESX.ConfigManager.StorageSystem&lt;br /&gt;
&lt;br /&gt;
        # Get FC HBAs&lt;br /&gt;
        $HBAs = $objViewESXstorageSys.StorageDeviceInfo.HostBusAdapter | Where-Object {$_.Key -like &amp;quot;*FibreChannelHba*&amp;quot;}&lt;br /&gt;
        #$HBAs&lt;br /&gt;
&lt;br /&gt;
        foreach ($hba in $HBAs) {&lt;br /&gt;
            # Enumerate LUNs&lt;br /&gt;
            $LUNcount = $objViewESXstorageSys.StorageDeviceInfo.MultiPathInfo.Lun.Length&lt;br /&gt;
            #Write-Host (&amp;quot;Enumerating $LUNcount LUNs on &amp;quot; + $hba.Device)&lt;br /&gt;
            &lt;br /&gt;
            for ($LUNidx = 0; $LUNidx -lt $LUNcount; $LUNidx++ ) {&lt;br /&gt;
                $objScsiLUN = $objViewESXstorageSys.StorageDeviceInfo.MultiPathInfo.Lun[$LUNidx]&lt;br /&gt;
                #$objScsiLUN&lt;br /&gt;
                &lt;br /&gt;
                # Enumerate paths on LUN&lt;br /&gt;
                $PathCount = $objScsiLUN.Path.Length&lt;br /&gt;
                #Write-Host (&amp;quot;Enumerating $PathCount paths on &amp;quot; + $objScsiLUN.Id)&lt;br /&gt;
                &lt;br /&gt;
                for ($PathIdx = 0; $PathIdx -lt $PathCount; $PathIdx++) {&lt;br /&gt;
                    $objSCSIpath = $objViewESXstorageSys.StorageDeviceInfo.MultiPathInfo.Lun[$LUNidx].Path[$PathIdx]&lt;br /&gt;
                    #Write-Host ($objSCSIpath.Name + &amp;quot; - &amp;quot; + $objSCSIpath.PathState)&lt;br /&gt;
                    &lt;br /&gt;
                    # Only care about one path, active on current HBA&lt;br /&gt;
                    if (($objSCSIpath.PathState -eq &amp;quot;active&amp;quot;) -and ($objSCSIpath.Adapter -eq $hba.Key)) {&lt;br /&gt;
                        # Now get the disk that we want&lt;br /&gt;
                        $objSCSIdisk = $objViewESXstorageSys.StorageDeviceInfo.ScsiLun | Where-Object{ ($_.CanonicalName -eq $objScsiLUN.Id) -and ($_.DeviceType -eq &amp;quot;disk&amp;quot;) }&lt;br /&gt;
                        #$objSCSIdisk&lt;br /&gt;
                        &lt;br /&gt;
                        # Now get the datastore info for disk&lt;br /&gt;
                        $MountCount = $objViewESXstorageSys.FileSystemVolumeInfo.MountInfo.Length&lt;br /&gt;
                        #Write-Host (&amp;quot;Enumerating $MountCount mounts on &amp;quot; + $objSCSIdisk.CanonicalName)&lt;br /&gt;
                        &lt;br /&gt;
                        for ($MountIdx = 0; $MountIdx -lt $MountCount; $MountIdx++ ) {&lt;br /&gt;
                            if ($objViewESXstorageSys.FileSystemVolumeInfo.MountInfo[$MountIdx].Volume.Type -eq &amp;quot;VMFS&amp;quot; ) {&lt;br /&gt;
                                $objVolume = $objViewESXstorageSys.FileSystemVolumeInfo.MountInfo[$MountIdx].Volume&lt;br /&gt;
                                #$objVolume&lt;br /&gt;
                                &lt;br /&gt;
                                $ExtentCount = $objVolume.Extent.Length&lt;br /&gt;
                                #Write-Host (&amp;quot;Enumerating $ExtentCount mounts on &amp;quot; + $objVolume.Name)&lt;br /&gt;
                                &lt;br /&gt;
                                for ($ExtentIdx = 0; $ExtentIdx -lt $ExtentCount; $ExtentIdx++ ) {&lt;br /&gt;
                                    $objExtent = $objVolume.Extent[$ExtentIdx]&lt;br /&gt;
                                    &lt;br /&gt;
                                    # Match extent name to disk name&lt;br /&gt;
                                    if ($objExtent.DiskName -eq $objSCSIdisk.CanonicalName) {&lt;br /&gt;
                                        #Write-Host($objSCSIdisk.Vendor + &amp;quot; &amp;quot; + $objSCSIdisk.Model + &amp;quot; &amp;quot; + $objSCSIdisk.CanonicalName + &amp;quot;`t&amp;quot; + $objVolume.Name)&lt;br /&gt;
                                        &lt;br /&gt;
                                        $row = &amp;quot;&amp;quot; | Select Datastore, Make, Model, LUN&lt;br /&gt;
                                        $row.Datastore = $objVolume.Name&lt;br /&gt;
                                        $row.Make = ($objSCSIdisk.Vendor).TrimEnd()&lt;br /&gt;
                                        $row.Model = ($objSCSIdisk.Model).TrimEnd()&lt;br /&gt;
                                        $row.LUN = ([regex]::matches($objSCSIdisk.CanonicalName, &amp;quot;(?&amp;lt;=:)([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$&amp;quot;)).Item(0).Value&lt;br /&gt;
                                        &lt;br /&gt;
                                        # Only add datastore to array if it doesn&amp;#039;t already exist&lt;br /&gt;
                                        if ( ! ($results | ?{$_.Datastore -eq $row.Datastore}) ) {$results = $results + $row}&lt;br /&gt;
                                    }&lt;br /&gt;
                                }&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    $results&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Get-DS-LUNs-v4 {&lt;br /&gt;
    foreach ($cluster in (Get-View -ViewType &amp;quot;ClusterComputeResource&amp;quot;)) {&lt;br /&gt;
      $vmhostsview = $cluster.host | % { Get-View $_ }&lt;br /&gt;
      $vmhostview  = $vmhostsview | Select -first 1&lt;br /&gt;
      $ScsiLuns    = $vmhostsview | % { $_.Config.StorageDevice.ScsiLun } | Select -unique *&lt;br /&gt;
      $UUIDs       = $ScsiLuns | Select -unique UUID&lt;br /&gt;
      $Datastores  = $vmhostsview | % { $_.Config.FileSystemVolume.MountInfo } | % { $_.Volume } | Select -Unique *&lt;br /&gt;
      $HostLUN     = $vmhostsview | % { $_.Config.StorageDevice.ScsiTopology.Adapter } | % { $_.Target | % { $_.LUN } } | Select -unique *&lt;br /&gt;
      foreach ($UUID in $UUIDs) {&lt;br /&gt;
        $Lun = $ScsiLuns | ? { $_.UUID -eq $UUID.UUID } | Select -first 1&lt;br /&gt;
        $objVolume               = &amp;quot;&amp;quot; | Select Datastore, Make, Model, LUN&lt;br /&gt;
&lt;br /&gt;
        $objVolume.LUN       = ($HostLUN | ? { $_.ScsiLun -eq $Lun.Key } | select -unique LUN).LUN&lt;br /&gt;
        $objVolume.Make        = $Lun.Vendor&lt;br /&gt;
        $objVolume.Model         = $Lun.Model&lt;br /&gt;
        foreach ($vol in $Datastores) {&lt;br /&gt;
          if ($vol.extent | % { $_.diskname -eq $Lun.CanonicalName}) {&lt;br /&gt;
            $objVolume.Datastore  = $vol.Name&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        $objVolume&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:VMware]]&lt;br /&gt;
[[Category:PowerShell]]&lt;br /&gt;
[[Category:PowerCLI]]&lt;/div&gt;</summary>
		<author><name>Sstrutt</name></author>
	</entry>
</feed>