Invoke-MSIDAzureAdSamlRequest.ps1

<#
.SYNOPSIS
   Invoke Saml Request on Azure AD.
.EXAMPLE
    PS C:\>$samlRequest = New-MSIDSamlRequest -Issuer 'urn:microsoft:adfs:claimsxray'
    PS C:\>Invoke-MSIDAzureAdSamlRequest $samlRequest.OuterXml
    Create new Saml Request for Claims X-Ray and Invoke on Azure AD.
.INPUTS
    System.String
#>

function Invoke-MSIDAzureAdSamlRequest {
    [CmdletBinding()]
    [OutputType()]
    param (
        # SAML Request
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [object[]] $Tokens,
        # Azure AD Tenant Id
        [Parameter(Mandatory = $false)]
        [string] $TenantId = 'common'
    )

    process {
        foreach ($Token in $Tokens) {
            if ($Token -is [string]) {
                $xmlSamlRequest = ConvertFrom-SamlSecurityToken $Tokens
            }
            else {
                $xmlSamlRequest = $Token
            }
            $EncodedSamlRequest = $xmlSamlRequest.OuterXml | Compress-Data | ConvertTo-Base64String

            [System.UriBuilder] $uriAzureAD = 'https://login.microsoftonline.com/{0}/saml2' -f $TenantId
            $uriAzureAD.Query = ConvertTo-QueryString @{
                SAMLRequest = $EncodedSamlRequest
            }

            Write-Verbose ('Invoking Azure AD SAML2 Endpoint [{0}]' -f $uriAzureAD.Uri.AbsoluteUri)
            Start-Process $uriAzureAD.Uri.AbsoluteUri
        }
    }
}