functions/mailbox/Connect-EXRMailbox.ps1

function Connect-EXRMailbox
{
    [CmdletBinding()]
    param (
        [Parameter(Position = 0, Mandatory = $true)]
        [string]
        $MailboxName,
        
        [Parameter(Position = 1, Mandatory = $false)]
        [string]
        $ClientId,
        
        [Parameter(Position = 2, Mandatory = $false)]
        [string]
        $redirectUrl,
        
        [Parameter(Position = 3, Mandatory = $false)]
        [string]
        $ClientSecret,
        
        [Parameter(Position = 4, Mandatory = $false)]
        [string]
        $ResourceURL,
        
        [Parameter(Position = 5, Mandatory = $false)]
        [switch]
        $Beta,
        
        [Parameter(Position = 6, Mandatory = $false)]
        [String]
        $Prompt,

        [Parameter(Position = 7, Mandatory = $false)]
        [switch]
        $CacheCredentials,

        [Parameter(Position = 8, Mandatory = $false)]
        [switch]
        $Outlook,

        [Parameter(Position = 9, Mandatory = $false)]
        [switch]
        $ShowMenu,

        [Parameter(Position = 10, Mandatory = $false)]
        [switch]
        $EnableTracing,

        [Parameter(Position = 11, Mandatory = $false)]
        [switch]
        $ManagementAPI


        
    )
    Begin
    {
        if($ManagementAPI.IsPresent){
            if ([String]::IsNullOrEmpty($ResourceURL)){
                $ResourceURL = "manage.office.com"
            }
        }
        if ([String]::IsNullOrEmpty($ClientId))
        {
            $redirectUrl = "urn:ietf:wg:oauth:2.0:oob"
            $defaultAppReg = Get-EXRDefaultAppRegistration
            if($defaultAppReg -eq $null -bor $ShowMenu.IsPresent){
                $ProceedOkay = $false
                Do {
                    Write-Host "
                    ---Default ClientId Selection ----------
                    1 = Mailbox Access Only
                    2 = Mailbox Contacts Access Only
                    3 = Full Access to all Graph API functions
                    4 = Reporting Access Only
                    5 = Management API Access Only
                    6 = Set Default Application Registration
                    7 = Delete Default Application Registration
                    8 = Exit
                    --------------------------"

                    $choice1 = read-host -prompt "Select number & press enter"
                    switch($choice1){
                        "1"{
                            $ProceedOkay = $true
                            $ClientId = "1d236c67-7e0b-42bc-88fd-d0b70a3df50a"
                        }
                        "2" {
                            $ProceedOkay = $true
                            $ClientId = "9149e700-47a9-4ba6-b01e-20716509fac7"
                            
                        }
                        "3" {
                            $ProceedOkay = $true
                            $ClientId = "5471030d-f311-4c5d-91ef-74ca885463a7"
                        }
                        "4" {
                            $ProceedOkay = $true
                            $ClientId = "e9a8cb7e-9630-4313-8705-9d6f3181bf01"
                        }
                        "5" {
                            $ProceedOkay = $true
                            $ClientId = "2eba6dfc-2962-4242-acdc-acd6c4f5dea8"
                        }                        
                        "6" {
                            New-EXRDefaultAppRegistration
                            $ProceedOkay = $true
                            $defaultAppReg = Get-EXRDefaultAppRegistration
                            $ClientId = $defaultAppReg.ClientId
                            $redirectUrl = $defaultAppReg.RedirectUrl 
                        }
                        "7"{
                            Remove-EXRDefaultAppRegistration
                            Write-Host "Removed Default Registration"
                            $ProceedOkay = $true
                        }
                        "8"{return}
                            

                    }
                } until ($ProceedOkay)
            }
            else{
                $ClientId = $defaultAppReg.ClientId
                $redirectUrl = $defaultAppReg.RedirectUrl 
            }
            if([String]::IsNullOrEmpty($ResourceURL)){
                $Resource = "graph.microsoft.com"
            }else{
                $Resource = $ResourceURL
            }            
            if($Outlook.IsPresent){
                $Resource = ""
            }
            if($EnableTracing.IsPresent){
                $Script:TraceRequest = $true
            }
            if($beta.IsPresent){
                $tkn = Get-EXRAccessToken -MailboxName $MailboxName -ClientId $ClientId  -redirectUrl $redirectUrl   -ResourceURL $Resource -beta -Prompt $Prompt -CacheCredentials                  
            }
            else{
                $tkn = Get-EXRAccessToken -MailboxName $MailboxName -ClientId $ClientId -redirectUrl $redirectUrl  -ResourceURL $Resource -Prompt $Prompt -CacheCredentials   
            }
        }
        else{
            $tkn = Get-EXRAccessToken -ClientId $ClientId -MailboxName $MailboxName -redirectUrl $redirectUrl -ClientSecret $ClientSecret -ResourceURL $ResourceURL -Beta:$beta.IsPresent -prompt $Prompt -CacheCredentials
        }
        if($tkn.Mailbox -ne $null){write-host "connected to mailbox"}
    }
}