Public/Get-iPilotTeamsDomain.ps1

Function Get-iPilotTeamsDomain {
    <#
        .Synopsis
        Displays a list of available iPilot domains.

        .Description
        Returns available iPilot domains based on supplied credentials.

        .Parameter ApiVersion
        Version of the NuWave iPilot to use. Defaults to version 1.

        .Parameter Credential
        iPilot credential

        .Example
        # Get avilable iPilot domains
        Get-iPilotTeamsDomain -Credential $Credential

    #>

    Param (
        [System.String]
            $ApiUrl = "https://api.nuwave.com", 
        [System.String]
            $ApiVersion = "v1",
        [System.String]
            $ApiKey, 
        [System.Int16]
            $NumberOfRecords = 100,
        [System.Management.Automation.PSCredential]
            $Credential,
        [Switch] 
            $RefreshToken,
        [Switch]
            $Verbose,
        [Switch]
            $Debug
    )

    Begin {

    }

    Process {
        # Verbose Switch
        if($PSBoundParameters.containskey("Verbose")) {
            $PreviousVerbosePreference = $VerbosePreference
            $VerbosePreference = "continue"
        }

        # Debug Switch
        if($PSBoundParameters.containskey("Debug")) {
            $PreviousDebugPreference = $DebugPreference
            $DebugPreference = "continue"
        }

        # Force refresh OAuth Token
        if ($RefreshToken.IsPresent) {
            $global:iPilotOAuthToken = $null
            $global:iPilotDomain = $null
        }

        Initialize-iPilotSession -ApiUrl $ApiUrl -ApiVersion $ApiVersion

        # Build iPilot API Request
        $GetiPilotDomainRequestUri = "$ApiUrl/$ApiVersion/msteams?limit=$NumberOfRecords&page=1"

        # Splat Invoke-RestMethod parameters
        Write-Verbose "Request Uri: $GetiPilotDomainRequestUri"
        Write-Verbose "Request Method: Get"
        $GetiPilotAvailableNumberInvokeParams = @{
            Uri = $GetiPilotDomainRequestUri
            Method = "Get"
            ContentType = "application/json"
            Headers = @{
                "X-Access-Token" = $global:iPilotOAuthToken.access_token
                "x-api-key"      = $global:iPilotApiKey
            }
        } 

        # Execute the REST API
        Try {
            $GetiPilotDomainResponse = Invoke-RestMethod @GetiPilotAvailableNumberInvokeParams

            if ($GetiPilotDomainResponse.domains.count -gt 1) {
                # Get domain selection from grid view
                $global:iPilotDomain = $GetiPilotDomainResponse.domains | Out-GridView -Title "Select the domain:" -PassThru
            } else {
                $global:iPilotDomain = $GetiPilotDomainResponse.domains
            }
            Write-Output "iPilot Domain: $global:iPilotDomain"
        } Catch {
            Write-Error "No iPilot Domain(s) available.`n
                URL: $($GetiPilotDomainRequestUri).`n
                Error: $($_)"

        }

        # Verbose Switch
        if($PSBoundParameters.containskey("Verbose")) {
            $VerbosePreference = $PreviousVerbosePreference
        }

        # Debug Switch
        if($PSBoundParameters.containskey("Debug")) {
            $DebugPreference = $PreviousDebugPreference
        }
    }
}