Private/Invoke-OfflineActivation.ps1

function Invoke-OfflineActivation
{
    [CmdletBinding()]
    param (
        [Microsoft.Management.Infrastructure.CimSession]$CimSession,
        [string]$ConfirmationId,
        [CimInstance]$Service
    )

    $licenseInfo = Get-LicenseStatus -CimSession $CimSession
    Write-Verbose "License Status: $($licenseInfo.LicenseStatus)"
    if ($licenseInfo.Activated) { Write-Warning 'The product is already activated.'; return }

    $product = Get-WindowsLicensingProduct -CimSession $CimSession

    # Accept dashes, spaces, or plain digits; strip separators before submission
    $normalizedCid = $ConfirmationId -replace '[\s\-]', ''
    $installationId = (Get-OfflineInstallationId -CimSession $CimSession).OfflineInstallationId

    Write-Verbose 'Submitting activation and confirmation IDs...'
    Write-Debug "Offline Installation ID: $installationId"
    Write-Debug "Confirmation ID: $normalizedCid"

    $product | Invoke-SppCimMethod -MethodName DepositOfflineConfirmationId -Arguments @{
        InstallationId = $installationId
        ConfirmationId = $normalizedCid
    }

    Write-Verbose 'Updating the license status...'
    $Service | Invoke-SppCimMethod -MethodName RefreshLicenseStatus
}