Private/Get-ScriptExtraData.ps1


function Get-ScriptExtraData {
    [cmdletbinding()]
    [outputtype('System.Collections.Hashtable')]
    param()
    $Data = @{
        ClusterName            = 'Unknown'
        S2DEnabled             = 'Unknown'
        StorageSubSystemHealth = 'Unknown'
    }
    $MSCluster = Get-CimInstance -ClassName mscluster_cluster -Namespace root\mscluster -ErrorAction SilentlyContinue
    if ($MSCluster) {
        $Data['ClusterName'] = $MSCluster.Name
        if ($MSCluster.S2DEnabled -eq 1) {
            Try {
                $SSS = Get-CimInstance -ClassName MSFT_StorageSubSystem -Namespace ROOT\Microsoft\Windows\Storage | Where-Object { $_.Name -ilike "$($Data['ClusterName'])*" }
                $SP = Get-CimInstance -ClassName MSFT_StoragePool -Namespace ROOT\Microsoft\Windows\Storage | Where-Object { $_.IsPrimordial -ne $true }
                $VDs = Get-CimInstance -ClassName MSFT_VirtualDisk -Namespace ROOT\Microsoft\Windows\Storage
                $Nodes = Get-CimInstance -Namespace root\mscluster -ClassName MSCluster_Node
            }
            catch {
                Write-Warning $Strings.Error
                Write-Warning $_
                Read-Host $Strings.AnyKey
            }
            $Data['S2DEnabled'] = 'Yes'
            $Data['StorageSubSystemHealth'] = switch ($SSS.HealthStatus) {
                0 { 'Healthy' }
                1 { 'Warning' }
                2 { 'Unhealthy' }
                Default { 'Unknown' }
            }
            $Data['StoragePools'] = $SP
            $Data['VirtualDisks'] = $VDs
            $Data['Nodes'] = $Nodes
        }
        else {
            $Data['S2DEnabled'] = 'No'
        }
    }
    return $Data
}