Request/Get-SDPRequest.ps1

Function Get-SDPRequest
{
    <#
    .SYNOPSIS
        Get request
 
    .PARAMETER RequestId
        Request id
 
    .PARAMETER InputData
        Custom search object.
 
list_info :
{
    "row_count" : number of rows to be returned(maximum row_count = 100)
    "start_index" : starting row index
    "sort_field" : "fieldName"
    "sort_order" : "asc/desc",
    "get_total_count" : boolean (by default it will be false)
    "has_more_rows" : boolean (will be returned with the response)
    "total_count" : count (will be returned with the response only)
    "search_criteria" : Refer search criteria object given in the attributes of List Info(For performing advanced search)
    "fields_required" : [ "list of fields required" ]
}
 
    .PARAMETER Limit
        Limit returned data. Default return last 100 items.
 
    .EXAMPLE
        $Request = Get-SDPRequest -RequestId 547
 
    .EXAMPLE
        557, 558 | Get-SDPRequest
 
    .EXAMPLE
        $InputData = @{
            "list_info"= @{
                "search_fields"= @{
                    "subject"= "SRS-F133"
                    "status.name"= "Otwarte"
                }
            }
        }
 
        Get-SDPRequest -InputData $InputData
 
    .NOTES
        Author: Michal Gajda
 
    .LINK
        https://www.manageengine.com/products/service-desk/sdpod-v3-api/requests/request.html#get-list-request
        https://www.manageengine.com/products/service-desk/sdpod-v3-api/requests/request.html#get-request
        https://www.manageengine.com/products/service-desk/sdpod-v3-api/getting-started/input-data.html
        https://www.manageengine.com/products/service-desk/sdpod-v3-api/getting-started/search-criteria.html
    #>

    [CmdletBinding(
        SupportsShouldProcess=$True,
        ConfirmImpact="Low",
        DefaultParameterSetName="Search"
    )]
    param (
        [String]$UriSDP,
        [String]$ApiKey,
        [Parameter(ParameterSetName="ItemId",
            ValueFromPipeline)]
        [Int]$RequestId,
        [Parameter(ParameterSetName="Search")]
        $InputData,
        [Parameter(ParameterSetName="Search")]
        [ValidateScript({($_ -is [int] -and $_ -gt 0) -or $_ -eq "All"})]
        $Limit = 100
    )

    Begin
    {
        #Create headers
        if(!$MyInvocation.BoundParameters.ContainsKey("UriSDP")) { $UriSDP = $Global:UriSDP }
        if(!$MyInvocation.BoundParameters.ContainsKey("ApiKey")) { $ApiKey = $Global:ApiKey }
    }

    Process
    {
        if($MyInvocation.BoundParameters.ContainsKey("RequestId"))
        {
            #Get by ID
            $InvokeParams = @{
                UriSDP = $UriSDP
                ApiKey = $ApiKey
                Method = "GET"
                EntityUri = "/api/v3/requests/$RequestId"
            }

            #Send request
            If ($PSCmdlet.ShouldProcess($RequestId,"Get request by id"))
            {
                $Result = Invoke-SDPAPIEntity @InvokeParams
                $Results = $Result.request
            }
        } else {
            #Get by Search
            $InvokeParams = @{
                UriSDP = $UriSDP
                ApiKey = $ApiKey
                Method = "GET"
                EntityUri = "/api/v3/requests"
                Limit = $Limit
            }
            if($MyInvocation.BoundParameters.ContainsKey("InputData"))
            {
                $InvokeParams['InputData'] = $InputData
            } else {
                $InvokeParams['InputData'] = @{
                    list_info = @{
                        start_index = 1
                        row_count = $Limit
                        sort_field = "id"
                        sort_order = "desc"
                    }
                }
            }

            #Send request
            If ($PSCmdlet.ShouldProcess("Get request by search params"))
            {
                $Result = Invoke-SDPAPIEntity @InvokeParams
                $Results = $Result.requests
            }
        }

        #Return result
        if($MyInvocation.BoundParameters.ContainsKey("Debug"))
        {
            Return $Result
        } else {
            Write-Verbose ($Results | Measure-Object).Count
            Return $Results
        }
    }

    End{}
}