Private/Get-ExpiryInformation.ps1

function Get-ExpiryInformation
{
    [OutputType([PSCustomObject])]
    [CmdletBinding()]
    param (
        [Microsoft.Management.Infrastructure.CimSession]$CimSession
    )

    $product = Get-WindowsLicensingProduct -CimSession $CimSession
    $status = [LicenseStatusCode]($product.LicenseStatus)
    $graceRemaining = $product.GracePeriodRemaining

    $expirationInfo = switch ($product.LicenseStatus)
    {
        0 { [LicenseStatusCode]::Unlicensed.ToString() }
        1
        {
            if ($null -eq $graceRemaining -or $graceRemaining -eq 0)
            {
                'The machine is permanently activated.'
            }
            else
            {
                $endDate = (Get-Date).AddMinutes($graceRemaining)
                if ($product.Description -imatch 'TIMEBASED_')
                {
                    "Timebased activation will expire $endDate"
                }
                elseif ($product.Description -imatch 'VIRTUAL_MACHINE_ACTIVATION')
                {
                    "Automatic VM activation will expire $endDate"
                }
                else
                {
                    "Volume activation will expire $endDate"
                }
            }
        }
        2 { "Initial grace period ends $((Get-Date).AddMinutes($graceRemaining))" }
        3 { "Additional grace period ends $((Get-Date).AddMinutes($graceRemaining))" }
        4 { "Non-genuine grace period ends $((Get-Date).AddMinutes($graceRemaining))" }
        5 { 'Windows is in Notification mode' }
        6 { "Extended grace period ends $((Get-Date).AddMinutes($graceRemaining))" }
        Default { throw 'Unexpected license status' }
    }

    $result = [PSCustomObject]@{
        Name           = $product.Name
        LicenseStatus  = $status
        ExpirationInfo = $expirationInfo
    }
    return $result
}