PowerShell Basics: -Like and -NotLike Comparators

PowerShell Basics_ -Like _ -NotLike Operator

Introduction to PowerShell’s Examples of -Like and -NotLike

On this page I will explain how to filter data with PowerShell’s -Like comparator.

One day I wanted to create a WMI script using the network adapter, but even using PowerShell I could not find the right properties, so I went back to basics and listed all the cmdlets containing ‘Adapter’.

Topics for PowerShell -Like Operator

Differences Between -Like and -Match

In a nutshell, if you are thinking, ‘I am probably going to need a wildcard to find this item’, then start with -Like.  However, if you are pretty sure of most of the letters in the word that you are looking for, then you are better off experimenting with -Match.

Here is a more technical distinction: -Match is a regular expression, whereas -Like is just a wildcard comparison, a subset of -Match.

Example 1: PowerShell’s -Like Comparator

This example only lists those cmdlets that end with the letters ‘adapter’.


# PowerShell -Like Operator
# Author: Guy Thomas
# Version September 2011 tested on PowerShell v 2.0

Clear-Host
Get-WmiObject -List | Where-Object {$_.name  -Like "*Adapter"}

Learning Points

Note 1: Observe how Get-WmiObject uses the -List parameter.

Note 2: Most comparator scripts are introduced with Where-Object, followed by the pipeline construction: $_.

Guy Recommends: Free WMI Monitor for PowerShell (FREE TOOL)Solarwinds Free WMI Monitor for PowerShell

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft’s operating systems.  Fortunately, SolarWinds have created a Free WMI Monitor for PowerShell so that you can discover these gems of performance information, and thus improve your PowerShell scripts.

Take the guesswork out of which WMI counters to use when scripting the operating system, Active Directory, or Exchange Server. Give this WMI monitor a try – it’s free.

SolarWinds WMI Monitor Download 100% Free Tool

Example 2: Double Wildcards -Match *Adapter*

The problem with Example 1 is that I suspect there are more cmdlets containing the word Adapter, for instance ‘adapter’ maybe in the middle of the WMI class name.


# PowerShell example to demonstrate -Like
# Author: Guy Thomas
# Version September 2011 tested on PowerShell v 2.0

Clear-Host
Get-WmiObject -List | Where-Object {$_.name  -Like "*Adapter*"}

Learning Points

Note 3: Once again, realise the importance of the construction $_.   Dollar, underscore.  The dot means ‘in this data stream’.

Note 4: Thanks to the second *, Example 2 should returns more cmdlets.

See more PowerShell -Match examples.

Example 3: The -Match Comparator Instead of -Like

I like to be flexible with PowerShell’s comparators, if the results are not as I anticipated then I may try an alternative such as -Match or -Contains.


# PowerShell example to check with -Match
# Author: Guy Thomas
# Version September 2011 tested on PowerShell v 2.0

Clear-Host
Get-WmiObject -List | Where-Object {$_.name  -Match "Adapter"}

Learning Points

Note 5:  Actually this example should list the same WMI classes as Example 2, but in other scripts you may getter better results using -Match instead of -Like.

See also PowerShell’s -Match »

Guy Recommends:  Network Performance Monitor (FREE TRIAL)Review of Orion NPM v11.5

SolarWinds Network Performance Monitor (NPM) will help you discover what’s happening on your network.  This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.

What I like best is the way NPM suggests solutions to network problems.  Its also has the ability to monitor the health of individual VMware virtual machines.  If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM on a 30-day free trial.

SolarWinds Network Performance Monitor Download 30-day FREE Trial

Example 4: More Comparators -NotLike

Time for a recap: The simplest comparator is ‘equals’, and the way you code this in PowerShell with -eq  (not =).  However, in these examples, -eq would not be effective, because realistically you would have to know the answer before you could ask the question!

I would like to take this opportunity to examine other comparators.  It is surprising how often the negative -NotLike operator produces a neat solution to a scripting problem.  For instance, there are several WmiObjects beginning with CIM, one way of excluding them would be to Not Like “CIM*”.

Furthermore, by using multiple criteria in the filter, you can fine tune the output, to achieve my goal I have added ‘-And’.  If for any reason -And fails remember this, when appending a second comparator the secret is to add another instance of the comparator ($_.name) after the -And.


# PowerShell example to list demonstrate -NotLike with -And
# Author: Guy Thomas
# Version September tested on PowerShell v 2

Clear-Host
$WMI = Get-WmiObject -List `
| where-Object {$_.name -NotLike "CIM*" -And $_.name -NotLike "__*"}
$WMI
Write-Host `n $WMI.count "WMI objects not contain CIM or __"

Learning Points

Note 6: My mission is always to get you started.  Now it’s over to you; experiment with different filters, substitute your ideas for “CIM”, and “__”.  Perhaps best of all would be to combine -NotLike and -Like.

Note 7: I appended code to count the number of WMI classes, this helps to see which variation of my script returns the most items.

Follow-up

As usual with my scripts, the mission is to get you started.  If you want to know more about -Match, -Like and their relatives, then start with PowerShell’s own help thus:
Get-Help about_comparison_operators.  (Or try Get-Help about*)

These help files introduce a whole world of specific terms, for example, ‘regular expression comparisons’ and ‘wildcard comparison’.  Once you need and understand such extra information, then I have succeeded in my mission of introducing you to -Match and -Like.

See more about PowerShell Comparison Operators »

Summary of PowerShell -Like Operator

So often we suffer from information overload. Working with PowerShell is no different, however it does supply three conditional operators to filter your information: -Match, -Like and -Contains. Each operator has different properties; with research, you can get just the filter you need, and thus filter the desired stream of information into your script’s output.

If you like this page then please share it with your friends


See more Windows PowerShell flow control examples

PowerShell Switch Statement  • PowerShell Real-life Techniques  • Free Permissions Analyzer

Differences between For, ForEach and ForEach-Object  • PowerShell Loops  • PowerShell Home

Conditional Operators   • Do While Loop  • PowerShell If Statement  • PowerShell Brackets

Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.