Function Get-VSANSmartsData {
<#
    .NOTES
    ===========================================================================
     Created by:    William Lam
     Organization:  VMware
     Blog:          www.virtuallyghetto.com
     Twitter:       @lamw
        ===========================================================================
    .DESCRIPTION
        This function retreives SMART drive data using new vSAN
        Management 6.6 API. This can also be used outside of vSAN
        to query existing SSD devices not being used for vSAN.
    .PARAMETER Cluster
        The name of a vSAN Cluster
    .EXAMPLE
        Get-VSANSmartsData -Cluster VSAN-Cluster
#>
   param(
        [Parameter(Mandatory=$false)][String]$Cluster
    )

    if($global:DefaultVIServer.ExtensionData.Content.About.ApiType -eq "VirtualCenter") {
        if(!$cluster) {
            Write-Host "Cluster property is required when connecting to vCenter Server"
            break
        }

        $vchs = Get-VSANView -Id "VsanVcClusterHealthSystem-vsan-cluster-health-system"
        $cluster_view = (Get-Cluster -Name $Cluster).ExtensionData.MoRef
        $result = $vchs.VsanQueryVcClusterSmartStatsSummary($cluster_view)
    } else {
        $vhs = Get-VSANView -Id "HostVsanHealthSystem-ha-vsan-health-system"
        $result = $vhs.VsanHostQuerySmartStats($null,$true)
    }

    $vmhost = $result.Hostname
    $smartsData = $result.SmartStats

    Write-Host "`nESXi Host: $vmhost`n"
    foreach ($data in $smartsData) {
        if($data.stats) {
            $stats = $data.stats
            Write-Host $data.disk

            $smartsResults = @()
            foreach ($stat in $stats) {
                $statResult = [pscustomobject] @{
                    Parameter = $stat.Parameter;
                    Value =$stat.Value;
                    Threshold = $stat.Threshold;
                    Worst = $stat.Worst
                }
                $smartsResults+=$statResult
            }
            $smartsResults | Format-Table
        }
    }
}