public/Get-RSDevice.ps1

function Get-RSDevice {
    <#
    .SYNOPSIS
        Get info on a given device
    .PARAMETER TreeID
        RedSeal TreeID for a device object
    .PARAMETER Name
        DNS name of the device object
    .OUTPUTS
        One custom object per device.
#>

    [cmdletbinding(DefaultParameterSetName='SearchByName')]
    Param(
    
        [Parameter(ValueFromPipeline = $true, Mandatory = $false, Position = 0, ParameterSetName = 'SearchByID')]
        [String]$TreeID="2c9697a7316371660131f73d53b2593a",

        [Parameter(ValueFromPipeline = $true, Mandatory = $false, Position = 0, ParameterSetName = 'SearchByName')]
        [String]
        $Name="871-Kent"
            
    )

    begin {
    }

    process {

        if ($PSCmdlet.ParameterSetName -eq 'SearchByName') {
            $uri = "https://$script:server/data/device/$Name"
        } else {
            $uri = "https://$script:server/data/device/id/$TreeID"
        }
        
        Write-Verbose "Fetching device object."   
        #$deviceXml = Invoke-RestMethod -uri $uri -Credential $script:credentials -ContentType "application/x-RedSealv6.0+xml"
        $deviceXml = Send-RSRequest -uri $uri

        Write-Debug "XML returned is at deviceXml.innerXML"

        if ($deviceXml.message.text -like 'No Device found*') {
            [pscustomobject] @{Message = "No device found"}
        } elseif ($deviceXml.list) {
            $deviceXml.list.device | foreach { Get-RSDeviceDetail $_ }
        } else {
            Get-RSDeviceDetail $deviceXml.device   
        }
    }
}