functions/Search-.ps1


function Search- {
    <#
    .Synopsis
        Searches Zendesk.
    .DESCRIPTION
        Searches Zendesk using the universal search api. See: https://developer.zendesk.com/rest_api/docs/support/search#query-basics
    .EXAMPLE
        PS C:\> Search-Zendesk -Query 'type:ticket status:open'

        Searched for open tickets
    .EXAMPLE
        PS C:\> Search-Zendesk -Query 'status<solved requester:user@domain.com type:ticket'

        Searched for unsolved tickets requested by user@domain.com
    #>

    [OutputType([PSCustomObject])]
    [CmdletBinding()]
    Param (
        # Zendesk Search Query
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $Query,

        # Zendesk Connection Context from `Get-ZendeskConnection`
        [Parameter(Mandatory = $false)]
        [PSTypeName('ZendeskContext')]
        [PSCustomObject]
        $Context = $null
    )

    Assert-IsAgent -Context $Context

    Write-Debug -Message "Query: $Query"
    $Query = [uri]::EscapeDataString($Query)
    Write-Debug -Message "Escaped Query: $Query"

    $results = Invoke-Method -Context $Context -Path "/api/v2/search.json?query=$Query" -Verbose:$VerbosePreference
    $results.results

}