Public/Get-DattoBcdrDevice.ps1

function Get-DattoBcdrDevice {
<#
.SYNOPSIS
Returns BCDR devices or one device by serial number.
.DESCRIPTION
Implements GET /v1/bcdr/device and GET /v1/bcdr/device/{serialNumber}. Organization-restricted API keys return only permitted devices.
.PARAMETER SerialNumber
The device serial number.
.PARAMETER Page
The one-based API page number for device listings.
.PARAMETER PerPage
The number of devices requested per page.
.PARAMETER ShowHiddenDevices
The integer flag Datto uses to indicate whether hidden devices should be included.
.PARAMETER ShowChildResellerDevices
The integer flag Datto uses to indicate whether child reseller devices should be included.
.PARAMETER All
Retrieves every listing page.
.PARAMETER RawResponse
Returns the API response body or envelope without extracting items.
.PARAMETER Connection
A connection object, name, or ID.
.EXAMPLE
Get-DattoBcdrDevice -All -ShowHiddenDevices 1
.EXAMPLE
Get-DattoBcdrDevice -SerialNumber 'ABC123ABC1'
#>

    [CmdletBinding(DefaultParameterSetName = 'List')]
    param(
        [Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName, ParameterSetName = 'BySerial')]
        [ValidateNotNullOrEmpty()][string]$SerialNumber,
        [Parameter(ParameterSetName = 'List')][ValidateRange(1, [int]::MaxValue)][int]$Page = 1,
        [Parameter(ParameterSetName = 'List')][ValidateRange(1, [int]::MaxValue)][int]$PerPage = 25,
        [Parameter(ParameterSetName = 'List')][Nullable[int]]$ShowHiddenDevices,
        [Parameter(ParameterSetName = 'List')][Nullable[int]]$ShowChildResellerDevices,
        [Parameter(ParameterSetName = 'List')][switch]$All,
        [Parameter()][switch]$RawResponse,
        [Parameter()][AllowNull()][object]$Connection
    )
    process {
        if ($PSCmdlet.ParameterSetName -eq 'BySerial') {
            $serial = ConvertTo-DattoApiPathSegment -Value $SerialNumber
            Invoke-DattoApiRequest -Path "/v1/bcdr/device/$serial" -RawResponse:$RawResponse -Connection $Connection
        }
        else {
            $query = @{ _page = $Page; _perPage = $PerPage }
            if ($PSBoundParameters.ContainsKey('ShowHiddenDevices')) { $query['showHiddenDevices'] = $ShowHiddenDevices }
            if ($PSBoundParameters.ContainsKey('ShowChildResellerDevices')) { $query['showChildResellerDevices'] = $ShowChildResellerDevices }
            Invoke-DattoApiRequest -Path '/v1/bcdr/device' -Query $query -All:$All -ResultProperty 'items' -RawResponse:$RawResponse -Connection $Connection
        }
    }
}