Private/Assert-ProviderParameterSet.ps1

function Assert-ProviderParameterSet {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateSet('Azure', 'AWS', 'GCP')]
        [string]$Provider,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$ParameterSetName
    )

    $expectedProvider = switch ($ParameterSetName) {
        'Azure'   { 'Azure' }
        'AWS'     { 'AWS' }
        'GCP'     { 'GCP' }
        'AzureTag' { 'Azure' }
        'AWSTag'   { 'AWS' }
        'GCPTag'   { 'GCP' }
        default   { $null }
    }

    if (-not $expectedProvider) {
        throw [System.InvalidOperationException]::new(
            "Unsupported parameter set '$ParameterSetName'."
        )
    }

    if ($Provider -ne $expectedProvider) {
        throw [System.ArgumentException]::new(
            "Provider '$Provider' does not match parameter set '$ParameterSetName'."
        )
    }
}