Private/Assert-OSDAppCacheFreeSpace.ps1

function Assert-OSDAppCacheFreeSpace {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$CachePath,

        [Parameter(Mandatory)]
        [ValidateRange(0, [double]::MaxValue)][double]$MinimumFreeSpaceGB,

        [Parameter(Mandatory)]
        [string]$Operation,

        [string]$LogPath,

        [string]$ExistingPath
    )

    $space = Assert-OSDAppTransactionSpace -Path $CachePath -ExistingPath $ExistingPath -MinimumFreeSpaceGB $MinimumFreeSpaceGB -Operation $Operation
    $driveLetter = [System.IO.Path]::GetPathRoot($CachePath).TrimEnd('\').TrimEnd(':')
    $freeGB = [math]::Round($space.AvailableBytes / 1GB, 2)

    if ($LogPath) {
        Write-OSDAppLog -LogPath $LogPath -Component 'Cache' -Event 'FreeSpaceCheck' -Message 'Checked free space on the OSDCloud cache volume.' -Data @{
            Operation          = $Operation
            DriveLetter        = $driveLetter
            FreeSpaceGB        = $freeGB
            MinimumFreeSpaceGB = $MinimumFreeSpaceGB
            RequiredBytes = $space.RequiredBytes
            Basis = $space.Basis
        }
    }

    [pscustomobject]@{
        DriveLetter        = $driveLetter
        FreeSpaceGB        = $freeGB
        MinimumFreeSpaceGB = $MinimumFreeSpaceGB
        Sufficient         = $true
    }
}