Public/Queries/Get-FleetQuery.ps1
function Get-FleetQuery { <# .SYNOPSIS Retrieves saved queries from FleetDM .DESCRIPTION Gets one or more saved queries from FleetDM with optional filtering. Use this to find query IDs for use with Invoke-FleetQuery or Invoke-FleetSavedQuery. .PARAMETER Id The specific query ID to retrieve .PARAMETER Name Filter queries by name (partial match) .PARAMETER Page Page number for pagination (0-based) .PARAMETER PerPage Number of results per page (default: 100) .EXAMPLE Get-FleetQuery Gets all saved queries .EXAMPLE Get-FleetQuery -Name "users" Gets all queries with "users" in the name .EXAMPLE Get-FleetQuery -Id 42 Gets details for query ID 42 .EXAMPLE Get-FleetQuery | Where-Object { $_.query -like "*chrome*" } | Format-Table id, name, query -Wrap Lists all queries that reference Chrome .LINK https://fleetdm.com/docs/using-fleet/rest-api#list-queries #> [CmdletBinding(DefaultParameterSetName = 'List')] param( [Parameter(ParameterSetName = 'ById', Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)] [ValidateRange(1, [int]::MaxValue)] [int]$Id, [Parameter(ParameterSetName = 'List')] [string]$Name, [Parameter(ParameterSetName = 'List')] [int]$Page, [Parameter(ParameterSetName = 'List')] [ValidateRange(1, 500)] [int]$PerPage = 100 ) process { if ($PSCmdlet.ParameterSetName -eq 'ById') { # Get specific query $endpoint = "queries/$Id" Write-Verbose "Retrieving query with ID: $Id" $result = Invoke-FleetDMRequest -Endpoint $endpoint -Method GET # Add custom type for formatting if ($result.query) { $result.query.PSObject.TypeNames.Insert(0, 'FleetDM.Query') return $result.query } else { Write-Warning "No query data returned for ID: $Id" return $null } } else { # List queries with filters $queryParams = @{ per_page = $PerPage } # Add optional parameters if ($PSBoundParameters.ContainsKey('Page')) { $queryParams['page'] = $Page } Write-Verbose "Retrieving queries with filters: $($queryParams | ConvertTo-Json -Compress)" # Determine if we should follow pagination $followPagination = -not $PSBoundParameters.ContainsKey('Page') if ($followPagination) { $result = Invoke-FleetDMRequest -Endpoint 'queries' -QueryParameters $queryParams -FollowPagination } else { $response = Invoke-FleetDMRequest -Endpoint 'queries' -QueryParameters $queryParams $result = $response.queries } # Filter by name if specified (client-side filtering) if ($Name) { $result = $result | Where-Object { $_.name -like "*$Name*" } } # Add custom type for formatting foreach ($query in $result) { $query.PSObject.TypeNames.Insert(0, 'FleetDM.Query') } Write-Verbose "Retrieved $($result.Count) queries" return $result } } } |