Scripts/Get-DigitalOceanImage.ps1

function Get-DigitalOceanImage {
    [CmdletBinding(DefaultParameterSetName='Default')]
    param (
         # Parameter help description
         [Parameter(Mandatory=$true)]
         [string]
         $Token,
         # Parameter help description
         [Parameter(Mandatory=$false,ParameterSetName='ID')]
         [int]
         $Id,
         # Parameter help description
         [Parameter(Mandatory=$false,ParameterSetName='Slug')]
         [string]
         $Slug,
         # Parameter help description
         [Parameter(Mandatory=$false,ParameterSetName='Paging')]
         [int]
         $Page,
         # Parameter help description
         [Parameter(Mandatory=$false,ParameterSetName='Paging')]
         [int]
         $PerPage,
         # Parameter help description
         [ValidateSet('distribution','application', IgnoreCase=$false)]
         [Parameter(Mandatory=$false,ParameterSetName='Default')]
         [Parameter(Mandatory=$false,ParameterSetName='Paging')]
         [string]
         $Type,
         # Parameter help description
         [Parameter(Mandatory=$false,ParameterSetName='Default')]
         [Parameter(Mandatory=$false,ParameterSetName='Paging')]
         [switch]
         $Private
    )
    
    begin {
    }
    
    process {
        $uri = "images"
        if($PSCmdlet.ParameterSetName -eq 'ID'){
            $uri += "/$Id"
        }
        if($PSCmdlet.ParameterSetName -eq 'Slug'){
            $uri += "/$Slug"
        }

        $query = @{}

        if($PSCmdlet.ParameterSetName -eq 'Paging') {
            if ($Page -gt 0) {
                $query.page = $Page
            }
            if ($PerPage -gt 0) {
                $query.per_page = $PerPage
            }
        }
        
        if($Type -ne $null -and $Type.Length -gt 0) {
            $query.type = $Type
        }

        if($Private){
            $query.private = $true
        }

        if($query.Count -gt 0) {
            $uri += '?' + (($query.Keys | ForEach-Object { [uri]::EscapeDataString($_) + '=' + [uri]::EscapeDataString($query.$_) }) -join '&')
        }
        $response = Invoke-DigitalOceanApiCall -Token $Token -Url $uri
        
        if($PSCmdlet.ParameterSetName -eq 'ID' -or $PSCmdlet.ParameterSetName -eq 'Slug'){
            $response.image | ConvertTo-DigitalOceanImage
        } else {
            $images = $response.images | ConvertTo-DigitalOceanImage

            $properties = @{
                Images = $images
                TotalCount = $response.meta.total
            }

            New-Object PSObject -Property $properties
        }
    }
    
    end {
    }
}