Public/Get-PaCustomReport.ps1

function Get-PaCustomReport {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $False, Position = 0)]
        [string]$Name,

        [Parameter(Mandatory = $False, Position = 1)]
        [string]$Vsys
    )

    BEGIN {
        $VerbosePrefix = "Get-PaCustomReport:"
        $Xpath = $Global:PaDeviceObject.createXPath('reports', $Name)
    }

    PROCESS {
        # Get the config info for the report
        # This is required for the call to run the report
        $ReportConfig = Invoke-PaApiConfig -Get -Xpath $XPath
        if ($ReportConfig.response.result.reports) {
            $Entries = $ReportConfig.response.result.reports.entry
        } else {
            $Entries = $ReportConfig.response.result.entry
        }

        $ReturnObject = @()
        foreach ($entry in $Entries) {
            # Initialize Report object, add to returned array
            $Report = [PaCustomReport]::new($entry.name)
            $ReturnObject += $Report

            # Get Node Name Properties
            $ShortDatabaseName = [HelperXml]::parseCandidateConfigXml($entry.type, $true)
            $Report.Database = $Report.TranslateDatabaseName($ShortDatabaseName, 'Friendly')
            Write-Verbose "$VerbosePrefix getting report: Name $($entry.name), Database $($Report.Database)"

            # Add other properties to report
            $Report.Columns = [HelperXml]::parseCandidateConfigXml($entry.type.$ShortDatabaseName.'aggregate-by'.member, $false)
            $Report.Columns += [HelperXml]::parseCandidateConfigXml($entry.type.$ShortDatabaseName.values.member, $false)
            $Report.SortBy = [HelperXml]::parseCandidateConfigXml($entry.type.$ShortDatabaseName.sortby, $false)
            $Report.TimeFrame = [HelperXml]::parseCandidateConfigXml($entry.period, $false)
            $Report.EntriesShown = [HelperXml]::parseCandidateConfigXml($entry.topn, $false)
            $Report.Groups = [HelperXml]::parseCandidateConfigXml($entry.topm, $false)
            $Report.Description = [HelperXml]::parseCandidateConfigXml($entry.description, $false)
            $Report.Query = [HelperXml]::parseCandidateConfigXml($entry.query, $false)
        }

        $ReturnObject
    }
}