Simplified Where-Object for multiple conditions on the same property for PowerShell?

While PowerShell version 3 already introduced a (quite controversial) simplified syntax for the Where-Object cmdlet (alias where). It still doesn’t account for a quite common error PowerShell beginners encounter when using where with multiple conditions on the same property. As an example let’s say we would like to filter the range 1-10 to get only those numbers that are between 6 and 7. I’ve seen many people (yes that includes me) attempting to do it like below since it seems a logical translation of ‘where x is greater than 5 and lower than 8’.:

1..10 | where {$_ -gt 5 -and -lt 8}
#correct version
1..10 | where {$_ -gt 5 -and $_ -lt 8}

Granted that this failing makes mathematically total sense since it should say ‘where x is greater 5 than and x is lower than 8′ . I’d wish there would be a syntax supporting something like this:

1..10 | where {$_ (-gt 5 -and -lt 8)}
Get-Process | where {$_.Name (-like 'power*' -and -notlike '*ise')}

The idea is that the parentheses would indicate that the preceding variable should be considered as the (left-hand) parameter for the operator. I came up with a crude proof of concept on how this could be done:

What do you think, would you also like to see this kind of syntax for Where-Object?

Photo Credit: Ana Sofia Guerreirinho via Compfight cc


I'd love to hear what you think

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s