tools/Convert-RtrResult.psm1

function Convert-RtrResult {
<#
    .SYNOPSIS
        Outputs formatted Real-time Response result fields
 
    .PARAMETER REQUEST
        Real-time Response request object
 
    .PARAMETER COMMAND
        Label to use when adding results
 
    .PARAMETER OUTPUT
        Target object containing Host Ids
#>

    [CmdletBinding()]
    param(
        [psobject]
        $Request,

        [string]
        $Command,

        [psobject]
        $Output
    )
    begin{
        # Response fields to capture
        $Fields = @('aid', 'base_command', 'complete', 'errors', 'query_time', 'sequence_id', 'session_id',
        'stderr', 'stdout', 'task_id')
    }
    process{
        # Capture results and add under each Host Id
        foreach ($Resource in @($Request.combined.resources, $Request.resources)) {
            foreach ($HostId in ($Resource.psobject.properties.name)) {
                $Result = [PSCustomObject] @{}

                foreach ($Field in $Fields) {
                    # If field is 'error', capture error code and message as a string
                    if ($Resource.$HostId.$Field -is [array]) {
                        if ($Resource.$HostId.$Field) {
                            $Result | Add-Member -MemberType NoteProperty -Name $Field -Value ("[" +
                            [string] $Resource.$HostId.$Field.code + "] " +
                            [string] $Resource.$HostId.$Field.message)
                        }
                    }
                    else {
                        if ($Resource.$HostId.$Field) {
                            $Result | Add-Member -MemberType NoteProperty -Name (
                            $Field) -Value $Resource.$HostId.$Field
                        }
                    }
                }
                # Add collection of fields to Host Id object
                $Output | Where-Object aid -eq $Result.aid |
                Add-Member -MemberType NoteProperty -Name $Command -Value $Result
            }
        }
        Write-Verbose ("Captured " + $Command + " result")
    }
}