Private/Test-METAssemblyLoadConflict.ps1

function Test-METAssemblyLoadConflict {
    [CmdletBinding()]
    [OutputType([string])]
    param(
        [Parameter(Mandatory)]
        [string] $AssemblyName,

        [Parameter(Mandatory)]
        [version] $RequiredVersion,

        [Parameter()]
        [object[]] $LoadedAssemblies = [System.AppDomain]::CurrentDomain.GetAssemblies()
    )

    $loaded = $LoadedAssemblies | Where-Object { $_.GetName().Name -eq $AssemblyName } | Select-Object -First 1

    # Only a downgrade is a genuine conflict. .NET resolves a request for an
    # older or equal assembly version against an already-loaded newer one, but
    # never the reverse - so an equal or higher loaded version is fine.
    if (-not $loaded -or $loaded.GetName().Version -ge $RequiredVersion) {
        return $null
    }

    "An older version of $AssemblyName ($($loaded.GetName().Version), loaded from '$($loaded.Location)') is already active in this PowerShell session and cannot be reconciled with the newer version required here ($RequiredVersion). .NET cannot unload or replace an assembly once a process has loaded it. This is typically caused by an earlier Import-Module or Connect- call to MicrosoftTeams, Microsoft.Graph, or Az in the same session. Restart PowerShell, then run Connect-METSession again before touching any other Microsoft 365 module."
}