Public/Get-UnifiSiteDevice.ps1

function Get-UnifiSiteDevice {
    [CmdletBinding(DefaultParameterSetName = 'Basic')]
    param (
        [Parameter(ParameterSetName="Detailed", Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
        [Parameter(ParameterSetName="Basic", Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
        [string]$name,
        [Parameter(ParameterSetName="Detailed")][switch]$Detailed,
        [Parameter(ParameterSetName="Detailed")]$MAC
    )
    $BasicURI="$controller/api/s/$name/stat/device-basic"
    $DetailedURI="$controller/api/s/$name/stat/device"

    
    if (!$Detailed){
        #Return basic information only.
        (Invoke-GetRestAPICall $BasicURI).data
    }
    else {
        if ($PSBoundParameters.ContainsKey('mac')){

            if ($mac -is [array]){
                # Normalize the mac addresses in the array to colon separated pairs.
                for ($i=0; $i -lt $mac.Length; $i++){
                    $mac[$i] = $mac[$i] -replace "([0-9a-f]{2})[^0-9a-f]?(?=.)",'$1:'
                }
                # If $mac is an array, use it as is.
                $Params=@{
                    macs = $mac
                }
            }
            else {
                # If $mac isn't an array, it should be a string.
                # Normalize the mac address to colon separated pairs.
                $mac = $mac -replace "([0-9a-f]{2})[^0-9a-f]?(?=.)",'$1:'
                
                # If $mac is a string, turn it into an array.
                $Params=@{
                    macs = @($mac)
                }
            }
            $body = New-UnifiCommand $params
            write-verbose $body
            $DeviceDetailed=(Invoke-POSTRestAPICall -url $DetailedURI -payload $body).data
        }
        else {
            $DeviceDetailed=(Invoke-GetRestAPICall $DetailedURI).data
        }
        $DeviceBasic=(Invoke-GetRestAPICall $BasicURI).data
       
        # The detailed results are missing the 'disabled' property, so the basic info is not a subset of the detailed info.
        # Add the 'disabled' property to the deatiled device information.
        write-verbose "Adding missing property `'disabled`' to detailed device information if needed."
        foreach ($entry in $DeviceDetailed){
            if ([bool]($entry.PSObject.Properties.name -match 'disabled') -eq $false){
                $Basic=$DeviceBasic | Where-Object {$_.mac -eq $entry.mac}
                $entry | Add-Member -MemberType NoteProperty -name 'disabled' -value $Basic.disabled
            }
        }
        $DeviceDetailed
    }
    <#
        .SYNOPSIS
        List site devices.

        .DESCRIPTION
        List site devices. For all device information, use the -Detailed switch.

        .NOTES
        The detailed results are missing the 'disabled' property from the API, so the basic device information is not a true subset of the detailed information.
        This has been "fixed" in this command by adding the missing property from the basic device information to the detailed device information.

        .PARAMETER Name
        Short name for the site. This is the 'name' value from the Get-UnifiSite command.

        .PARAMETER Detailed
        Switch to include full device details.

        .PARAMETER Mac
        Limit results to a specific MAC address(es). Value may be an array or string.
        
        .INPUTS
        System.String. Can take value from pipeline.

        .OUTPUTS
        System.Object.
    #>

}