Functions/Reports/Get-PASReport.ps1

# .ExternalHelp psPAS-help.xml
function Get-PASReport {
    [CmdletBinding()]
    param(

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [int]$limit,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateLength(1, 500)]
        [string]$search,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateSet('CreatedAt')]
        [string]$sort,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateSet('asc', 'desc')]
        [string]$sortDirection,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$createdBy,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$name,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$records,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$status,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$type,

        [parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $false
        )]
        [ValidateSet('AND', 'OR')]
        [string]$FilterLogicalOperator = 'AND'

    )

    begin {

        Assert-VersionRequirement -RequiredVersion 14.6

        #Parameter names which are used to build the structured filter expression, not sent as-is
        #Only these fields are accepted by the API's filter parameter, and only with the EQ operator
        $Parameters = [Collections.Generic.List[String]]@(
            'createdBy', 'name', 'records', 'status', 'type'
        )

    }

    process {

        if ($PSBoundParameters.ContainsKey('search') -or $PSBoundParameters.ContainsKey('sort') -or
            ($Parameters | Where-Object { $PSBoundParameters.ContainsKey($PSItem) })) {

            #search/filter/sort query parameters require a later version than the base endpoint
            Assert-VersionRequirement -RequiredVersion 15.0

        }

        #Create URL for Request
        $BaseURI = "$($psPASSession.BaseURI)/API/Reports"

        #Get Parameters to include in request
        $boundParameters = $PSBoundParameters | Get-PASParameter -ParametersToRemove ($Parameters + @('sortDirection', 'FilterLogicalOperator'))

        #Get parameters to build the structured filter expression from
        $filterParameters = $PSBoundParameters | Get-PASParameter -ParametersToKeep $Parameters

        $FilterString = $filterParameters | ConvertTo-StructuredFilterString -LogicalOperator $FilterLogicalOperator

        if ($null -ne $FilterString) {

            $boundParameters = $boundParameters + $FilterString

        }

        if ($PSBoundParameters.ContainsKey('sortDirection') -and $sortDirection -eq 'desc') {

            #Prefix the sort value with "-" to request descending order
            $boundParameters['sort'] = "-$($boundParameters['sort'])"

        }

        #Create Query String, escaped for inclusion in request URL
        $queryString = $boundParameters | ConvertTo-QueryString

        $URI = $BaseURI

        if ($null -ne $queryString) {

            #Build URL from base URL
            $URI = "$URI`?$queryString"

        }

        #Send request to web service
        $result = Invoke-PASRestMethod -Uri $URI -Method GET

        if ($null -ne $result) {

            #API only provides a totalCount value; page via Get-NextLink's offset support
            $Reports = $result | Get-NextLink -RequestUri $URI

            if ($null -ne $Reports) {

                #Return result
                $Reports | Add-ObjectDetail -TypeName psPAS.CyberArk.Vault.Report

            }

        }

    }

    end {}

}