Functions/Get-IAWidgetType.ps1

Function Get-IAWidgetType {
    <#
        .SYNOPSIS
            Returns Widget Types.
        .DESCRIPTION
            There are many different Widget Types that can be used. Each Widget Template has its specific Widget Types that can be used. 'Bar', 'List', 'Donut' etc...
        .EXAMPLE
            Get-IAWidgetType -All
    #>

    [CmdletBinding(DefaultParameterSetName='Name')]
    Param(
        [Parameter(Mandatory = $true, ParameterSetName='Filter')]
        [String] $Filter,
        [Parameter(Mandatory = $true, ParameterSetName='All')]
        [switch] $All
    )
    DynamicParam
    {
        try {
            $Bucket = New-Object -TypeName System.Management.Automation.RuntimeDefinedParameterDictionary
    
            $AttributeList = New-Object -TypeName System.Collections.ObjectModel.Collection[System.Attribute]
            $Values = (Invoke-IAQuery -QueryUrl 'WidgetTypes' -Method Get).Value.Name
            $AttribValidateSet = New-Object System.Management.Automation.ValidateSetAttribute($Values)
            $AttributeList.Add($AttribValidateSet)
    
            $AttribParameter = New-Object System.Management.Automation.ParameterAttribute
            $AttribParameter.Mandatory = $true
            $AttribParameter.ParameterSetName = 'Name'
            $AttribParameter.Position = 0
            $AttributeList.Add($AttribParameter)
            $ParameterName = 'Name'
            $Parameter = New-Object -TypeName System.Management.Automation.RuntimeDefinedParameter($ParameterName,[String], $AttributeList)
            $Bucket.Add($ParameterName, $Parameter)
            $Bucket
        }
        catch [System.Net.WebException] {
            $CurrentError = $_
            throw [System.Net.WebException]::New('Make sure TLS1.2 is allowed!', $currentError.Exception)
        }
        catch {
            $CurrentError = $_

            if($CurrentError.Exception.Message -like '*https:///api/Categories*'){
                throw [System.ArgumentException]::New('Make sure that you are connected to the environment!', $currentError.Exception)
            }
        }
    }
    End
    {
        Foreach ($key in $PSBoundParameters.Keys)
        {
            if ($MyInvocation.MyCommand.Parameters.$key.isDynamic)
            {
                Set-Variable -Name $key -Value $PSBoundParameters.$key
            }
        }
        
        $Uri = "WidgetTypes"

        if($All){}
        elseif($Name){
            $Uri += "?&`$filter=Name eq '$Name'"
        }
        elseif ($Filter) {
            $Uri += "?&`$filter=$Filter"
        }

        $response = Invoke-IAQuery -QueryUrl $Uri -Method Get
    
        if ($null -eq $response.value) {
            return $null
        }

        return $response.value
    }
}