Skip to content

Filter Queries

The Logic.Monitor PowerShell module provides powerful filtering capabilities through the -Filter parameter available in most Get commands. You can also use the Build-LMFilter cmdlet to help construct complex filters. Some cmdlets include a -FilterWizard parameter automatically.

Filter Syntax

The filter syntax supports the following operators:

OperatorDescriptionExample
-eqEqualname -eq 'myserver'
-neNot equalhostStatus -ne 'dead'
-gtGreater thanid -gt 100
-ltLess thanseverity -lt 4'
-geGreater than or equalalertCount -ge 5
-leLess than or equalalertCount -le 10
-containsContainsdisplayName -contains 'prod'
-notcontainsDoes not containname -notcontains 'test'
-andLogical ANDdisplayName -contains 'web' -and hostStatus -eq 'normal'
-orLogical ORhostStatus -eq 'dead' -or hostStatus -eq 'normal'

Using the Filter Wizard

The module includes a Filter Wizard to help construct complex filters visually:

LM Filter Wizard

To use the Filter Wizard:

Terminal window
# Launch the Filter Wizard
Build-LMFilter
# Use the generated filter with any Get command
Get-LMDevice -Filter (Build-LMFilter)
# Use builtin filter wizard parameter
Get-LMDeviceGroup -FilterWizard

Common Filter Examples

Simple Filters

Terminal window
# Find devices by status
Get-LMDevice -Filter 'hostStatus -eq "normal"'
# Find devices by name pattern
Get-LMDevice -Filter 'displayName -contains "web"'
# Find devices by collector
Get-LMDevice -Filter 'preferredCollectorId -eq 1'
# Get critical alerts
Get-LMAlert -Filter 'severity -eq "4"'
# Find active users
Get-LMUser -Filter 'status -eq "active"'

Date Filtering Examples

Terminal window
# Get devices not reporting in last 30 days
$thirtyDaysAgo = [int][double]::Parse((Get-Date).AddDays(-30).ToUniversalTime().Subtract((Get-Date "1/1/1970")).TotalSeconds)
Get-LMDevice -Filter "lastDataTime -lt '$thirtyDaysAgo'"
# Get alerts from last 24 hours
$lastDay = [int][double]::Parse((Get-Date).AddHours(-24).ToUniversalTime().Subtract((Get-Date "1/1/1970")).TotalSeconds)
Get-LMAlert -Filter "startEpoch -gt '$lastDay'"
# Get SDTs scheduled for next week
$nextWeek = [int][double]::Parse((Get-Date).AddDays(7).ToUniversalTime().Subtract((Get-Date "1/1/1970")).TotalSeconds)
Get-LMSDT -Filter "startDateTime -lt '$nextWeek'"

Best Practices

✅ DO

  • Use the Filter Wizard for complex queries
  • Quote all string values properly
  • Test filters before using in automation
  • Use epoch seconds for date comparisons
  • Group related conditions with parentheses

❌ DON'T

  • Don’t forget to escape special characters
  • Don’t use invalid operator combinations
  • Don’t skip testing complex filters
  • Don’t hardcode dates (use dynamic epoch conversion)

Key Guidelines

Terminal window
# ✓ Correct - properly quoted
Get-LMDevice -Filter 'name -eq "myserver"'
Get-LMDevice -Filter "name -eq 'myserver'"
# ✗ Wrong - missing quotes
Get-LMDevice -Filter name -eq myserver

Testing Filters

You can test your filters before using them:

Terminal window
# Test a filter query
Test-LMAppliesToQuery -Query 'system.hostname =~ "prod"'
# Preview filter results
Get-LMDevice -Filter 'hostStatus -eq "active"' | Select-Object id, displayName, name