Public/Connect-AzAccountRestMethod.ps1

<#
.Synopsis
   Connect to Aure using RestMethod.
.DESCRIPTION
   Connect to Azure using RestMethod.
.EXAMPLE
   $Header = Connect-AzAccountRestMethod -ByTenantName "XXXXXXXXXXXXXXXXX.onmicrosoft.com" -ApplicationID "XXXXX-XXXX-XXXX-XXXXXXXXX" -ApplicationSecret "XXXXXXXXXXXXXXXXXXXXXX"
   $Header = Connect-AzAccountRestMethod -ByTenantName "XXXXXXXXXXXXXXXXX.XXXXX.XXXX" -ApplicationID "XXXXX-XXXX-XXXX-XXXXXXXXX" -ApplicationSecret "XXXXXXXXXXXXXXXXXXXXXX"
   $Header = Connect-AzAccountRestMethod -ByTenantID "XXXXXX-XXXXX-XXXX-XXXX-XXXXXXXXX" -ApplicationID "XXXXX-XXXX-XXXX-XXXXXXXXX" -ApplicationSecret "XXXXXXXXXXXXXXXXXXXXXX"
 
#>

function Connect-AzAccountRestMethod
{
    [CmdletBinding()]
    [Alias()]
    [OutputType([int])]
    Param
    (
        [Parameter(ParameterSetName = 'ByTenantID',
                   Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [ValidateNotNullOrEmpty()]
        $ByTenantID,
        
        [Parameter(ParameterSetName = 'ByTenantName',
                   Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [ValidateNotNullOrEmpty()]
        $ByTenantName,

        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [ValidateNotNullOrEmpty()]
        $ApplicationID,
        
        [Parameter(Mandatory=$true,
                   ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [ValidateNotNullOrEmpty()]
        $ApplicationSecret

    )

    Begin
    {
        Write-Host "Starting Connect-AzAccountRestMethod Function." -ForegroundColor Cyan
    }
    Process
    {
        try
        {
            $ErrorActionPreference = "Stop"
            
            if ($PScmdlet.ParameterSetName -eq 'ByTenantID')
            {
                $authUrl = "https://login.windows.net/${ByTenantID}"
            }else{
                
                $authUrl = "https://login.windows.net/${ByTenantName}"
            }

            $AuthContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]$authUrl

            $credentials = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential $ApplicationID,$ApplicationSecret
            $authenticationTask = $AuthContext.AcquireTokenAsync("https://management.core.windows.net/",$credentials)
            $authenticationTask.Wait()
            $authenticationResult = $authenticationTask.Result
            $authHeader = @{
                            'Authorization'=$authenticationResult.CreateAuthorizationHeader()
            }

            Write-Host "Successfully got a BearerĀ authentication token from Azure Active Directory $DirectoryID." -ForegroundColor Cyan
            Write-Host "`nFor Advance you can use Access token in Invoke-RestMethod as header." -ForegroundColor DarkGray
            Write-Host "For Example:" -ForegroundColor DarkGray
            Write-Host "" -ForegroundColor DarkGray
            Write-Host '$Header = Connect-AzAccountRestMethod -ByTenantName "XXXXXXXXXXXXXXXXX.onmicrosoft.com" -ApplicationID "XXXXX-XXXX-XXXX-XXXXXXXXX" -ApplicationSecret "XXXXXXXXXXXXXXXXXXXXXX"' -ForegroundColor DarkGray
            Write-Host 'Invoke-RestMethod -Method GET -Uri https://management.azure.com/subscriptions?api-version=2016-06-01 -ContentType "application/json" -Headers $header' -ForegroundColor DarkGray
            
            return $authHeader
        }
        catch
        {
            Write-Host "`nOops something goes wrong...!!!" -ForegroundColor Red
            Write-Host "$_.Exception" -ForegroundColor Red
        }

    }
    End
    {
        Write-Host "`nEnding Connect-AzAccountRestMethod." -ForegroundColor Cyan
    }
}