Modules/Private/Get-S2DVolumeData.ps1

# CIM wrappers for volume-related queries — thin shims for Pester mockability

function Get-S2DVirtualDiskData {
    param([CimSession] $CimSession)
    if ($PSBoundParameters.ContainsKey('CimSession')) {
        Get-VirtualDisk -CimSession $CimSession -ErrorAction SilentlyContinue
        return
    }
    Get-VirtualDisk -ErrorAction SilentlyContinue
}

function Get-S2DVolumeInfoData {
    param([CimSession] $CimSession)
    if ($PSBoundParameters.ContainsKey('CimSession')) {
        Get-Volume -CimSession $CimSession -ErrorAction SilentlyContinue
        return
    }
    Get-Volume -ErrorAction SilentlyContinue
}

function Get-S2DClusterSharedVolumeData {
    param([CimSession] $CimSession)
    # Get-ClusterSharedVolume is cluster-aware — use CIM via MSCluster_Resource or direct call
    if ($PSBoundParameters.ContainsKey('CimSession')) {
        try {
            Get-ClusterSharedVolume -ErrorAction SilentlyContinue
        } catch {
            $null
        }
        return
    }
    try {
        Get-ClusterSharedVolume -ErrorAction SilentlyContinue
    } catch {
        $null
    }
}

function Get-S2DVirtualDiskFootprintData {
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        $VirtualDisk,

        [CimSession] $CimSession
    )
    process {
        if ($PSBoundParameters.ContainsKey('CimSession')) {
            $VirtualDisk | Get-StorageExtent -CimSession $CimSession -ErrorAction SilentlyContinue
            return
        }
        $VirtualDisk | Get-StorageExtent -ErrorAction SilentlyContinue
    }
}