Powershell - Overview of Where-Object basic syntax and its limitations

To support me, you can subscribe to the channel, share and like the videos, disable your ad blocker or make a donation. Thank you!

The basic/simplified syntax that appeared with Windows Powershell 3 is easier to understand but more limited than the standard/advanced syntax.

In my tests, it is also slightly faster in Powershell 7 (7.4.4) and slower in Windows Powershell 5.1.

# Standard/Advanced Syntax
Get-Service | Where-Object -FilterScript { $_.Status -eq ‘running’ }
# Basic/simplified syntax
Get-Service | Where-Object -Property Status -eq ‘running’ }
# But they are most often seen in this form (without the argument after Where-Object)
Get-Service | Where-Object { $_.Status -eq ‘running’ }
Get-Service | Where-Object Status -eq ‘running’ }

But the basic syntax has a few limitations.

The basic syntax can only be used for a single comparison.

# This syntax does not work
Get-Service | Where-Object -Property Status -eq ‘running’ -and StartType -eq ‘Automatic’
# You need to use the standard syntax
Get-Service | Where-Object -FilterScript {$_.Status -eq ‘running’ -and $_.StartType -eq ‘Automatic’}

Related links