Public/Search-FsArticle.ps1

Function Search-FsArticle {
<#
.SYNOPSIS
    Searches for Solution Articles in FreshService
.DESCRIPTION
    The Search-FsArticle function searches for solution articles across your FreshService domain using keywords
.EXAMPLE
    Search-FsArticle -SearchTerm "password reset"
    Searches for articles containing "password reset"
.EXAMPLE
    Search-FsArticle -SearchTerm "VPN" -UserEmail "user@domain.com"
    Searches for VPN articles accessible by the specified user
.PARAMETER SearchTerm
    The keywords to search for in solution articles (required)
.PARAMETER UserEmail
    Email of the user to search as (uses their permissions for article access)
.PARAMETER WorkspaceID
    The workspace ID to search in
.INPUTS
    String
.OUTPUTS
    PSCustomObject[]
.NOTES
    Requires FreshService API connection
    Only returns published articles that the user has access to
.LINK
    https://api.freshservice.com/v2/#search_solution_articles
#>

    [CmdletBinding()] 
    Param(
        [Parameter(Mandatory=$true,
            Position=0)]
            [String]$SearchTerm,
        
        [Parameter(Mandatory=$false)]
            [String]$UserEmail,
        
        [Parameter(Mandatory=$false)]
            [Int]$WorkspaceID
    )
    
    Begin {
        Write-Verbose -Message "Starting $($MyInvocation.InvocationName) with $($PsCmdlet.ParameterSetName) parameterset..."
        Write-Verbose -Message "Parameters are $($PSBoundParameters | Select-Object -Property *)"
        Connect-FreshServiceAPI
    } 
    
    Process {
        $APIEndpoint = "$($Script:APIURL)/solutions/articles/search"
        $QueryParams = @()
        
        # Add search term (required)
        $QueryParams += "search_term=$([uri]::EscapeDataString($SearchTerm))"
        
        # Add optional parameters
        if ($UserEmail) {
            $QueryParams += "user_email=$([uri]::EscapeDataString($UserEmail))"
        }
        
        if ($WorkspaceID) {
            $QueryParams += "workspace_id=$WorkspaceID"
        }
        
        # Build final endpoint
        if ($QueryParams.Count -gt 0) {
            $APIEndpoint += "?" + ($QueryParams -join "&")
        }
        
        Write-Verbose "API Endpoint: $($APIEndpoint)"
        Get-FreshServiceAPIResult -APIEndpoint $APIEndpoint -PrimaryObject 'articles' -Paginate $true -Method 'GET'
    } 
    
    End {
        Write-Verbose -Message "Ending $($MyInvocation.InvocationName)..."
    }
}