Private/Invoke-KB4RateLimitDelay.ps1

function Invoke-KB4RateLimitDelay
{
    [CmdletBinding()]
    param()

    if ($null -eq $script:KB4LastRequestAt)
    {
        $script:KB4LastRequestAt = [DateTimeOffset]::UtcNow
        return
    }

    # KnowBe4 allows four requests per second; keep a small safety margin.
    $minimumInterval = [TimeSpan]::FromMilliseconds(260)
    $elapsed = [DateTimeOffset]::UtcNow - $script:KB4LastRequestAt

    if ($elapsed -lt $minimumInterval)
    {
        Start-Sleep -Milliseconds ([int] ($minimumInterval - $elapsed).TotalMilliseconds)
    }

    $script:KB4LastRequestAt = [DateTimeOffset]::UtcNow
}