Windows PowerShell


Windows PowerShell Examples of -Match and -Like

Introduction to PowerShell's -Match and -Like

I want to show you how to filter data with PowerShell's -Match.  The scenario is that we want research WmiObjects in general and 'network' classes in particular.  The problem is that we list WMI classes we are swamped with hundreds of names.  Our solution will be to use a 'Where-Object' clause, with a comparitor of -Match or -Like.

Topics for PowerShell -Match and -Like

 ♣

Differences between -Match and -Like

The way that I remember the difference is that I think of '-Match' as meaning a pure pattern match.  Whereas to me, '-Like' is a more nebulous concept that is going to need the wildcard* symbol.  A more technical definition is as follows: -Like is just a wildcard comparison, while -Match is a regular expression, and a superset of -Like.

Example 1: The -Match Comparitor in a 'Where' Clause

WmiObject is our parent clause for this example.  The where-Object statement employs a comparitor to find the pattern "network".  Because we use -Match, "network" can be anywhere in the WMI object's name.  Incidentally, this combination of 'Where' with '-Match' is my favourite method of filtering data.

# PowerShell example to list demonstrate -Match
# Author: Guy Thomas
# Version 1.4 December 2008 tested on PowerShell v 1.0

clear-Host
$WMI = get-WmiObject -list | where-Object {$_.name -match "network"}
$WMI
Write-Host $WMI.count "WMI objects contain the word network"

Learning Points

Note 1:  Take special note of the important construction $_.   Dollar, underscore, dot means 'in this data stream'.

Note 2:  Observe how I have employed PowerShell's signature tune the (|) pipe.  The purpose of the pipe is to make the output of list, the input into the where-Object clause.

Guy Recommends: SolarWinds Engineer's Toolset v10Engineer's Toolset v10

The Engineer's Toolset v10 provides a comprehensive console of utilities for troubleshooting computer problems.  Guy says it helps me monitor what's occurring on the network, and the tools teaches me more about how the system literally operates.

There are so many good gadgets, it's like having free rein of a sweetshop. Thankfully the utilities are displayed logically: monitoring, discovery, diagnostic, and Cisco tools.  Download your copy of the Engineer's Toolset v 10

Example 2: The -Like Comparitor

I have made two changes compared with Example 1; I substituted -Like for -Match and adding a wildcard* in front of network.  -Like says to me 'sort of', 'fuzzy', or 'around about'.

# PowerShell example to demonstrate -Like
# Author: Guy Thomas
# Version 1.4 December 2008 tested on PowerShell v 1.0

clear-Host
$WMI = get-WmiObject -list | where-Object {$_.name -like "*network"}
$WMI
Write-Host $WMI.count "WMI objects contain the word network"

Learning Points

Note 1:  The variable $WMI.count enables us to compare these results with those of example 1; you should see that -Like produces fewer wmiObjects then -Match.  To make -Like show all the "network" object you need to add a second wildcard: "*network*".

Example 3: The -Match Comparitor with an If Construction

To give you perspective, I have introduced variations, for example employing an 'If' construction instead of the 'Where' in example 1 and 2.

clear-Host
$i=0
get-WmiObject -list | foreach {
    if($_.name -match "System") {
    write-Host $($_.name) ; $i++
    }
}
"There are $i objects containing System"

Learning Points

Note 1:  Unlike 'Where', the 'If' statement needs the additional command 'foreach'. What this does is initialize the loop containing $_.name.

Note 2:  The syntax of the 'If' construction is (test) then {script block}

Note 3:  In the line: "There are $i objects containing System"
admire how PowerShell interprets the counting variable ($i) in the middle of that text string.  This is called expanding a variable, and only works if you encase in "Double quotes".

Guy Recommends: SolarWinds LANSurveyorSolarwinds LANSurveyor

LANSurveyor will produce a neat diagram of your network topology.  But that's just the start; LANSurveyor can create an inventory of the hardware and software of your machines and network devices.  Other neat features include dynamic update for when you add new devices to your network.  I also love the ability to export the diagrams to Microsoft Visio.

Finally, Guy bets that if you take a free trial of LANSurveyor then you will find a device on your network that you had forgotten about, or someone else installed without you realizing!

Download a Free Trial of LANSurveyor

Example 4: More Comparators -NotMatch also -And

The simplest and most common comparitor is 'equals'.  The way you code this in PowerShell with -eq  (not =).  However, in the present examples, -eq would not be much use because effectively we would need to know the name of the specific class.  Whereas in this context we don't know the answer, and we want to broaden our research into possible names containing 'Win32'.

Thus let examine other comparators.  It is surprising how often the negative -NotMatch produces a neat solution to a scripting problem.  For instance, there are several WmiObjects beginning with CIM, thus one way of excluding them would be to use -NotMatch "CIM".

Furthermore, using multiple criteria for your filter is easy once you master the deceptively simple, '-And' syntax.  Just remember that you need to still need to add the left side of the comparitor ($_.name) after the -And.

# PowerShell example to list demonstrate -NotMatch and -and
# Author: Guy Thomas
# Version 1.2 December 2008 tested on PowerShell v 1.0

clear-PSAhost
$WMI = get-WmiObject -list `
| where-Object {$_.name -NotMatch "CIM" -And $_.name -NotMatch "__"}
$WMI
Write-Host $WMI.count "WMI objects not contain CIM or __"

Learning Points

Note 1: It would make my day if you experimented with different filters.  Substitute your ideas for "CIM", and "__".  Perhaps best of all would be to combine -NotMatch and -Match.

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.

  ˚

Summary of PowerShell Conditional Operators

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.

See more Windows PowerShell examples

PowerShell Home  • If Statement  • Conditional Operators  • Switch  • Loops  • Brackets

Please write in if you see errors of any kind.  Please report any factual mistakes, grammatical errors or broken links, I will be happy to not only to correct the fault, but also to give you credit.

Download my ebook:Getting Started with PowerShell
Getting Started with PowerShell - only $9.25

You get 36 topics organized into these 3 sections:
   1) Getting Started
   2) Real-life tasks
   3) Examples of Syntax.

In addition to the ebook, you get a PDF version of this  Introduction to PowerShell ebook  It runs to 120 pages of A4.

 *


Google

Web  This website

Review of Orion NPMGuy Recommends: Orion's NPM - Network Performance Monitor

Orion's performance monitor is designed for detecting network outages. A network-centric view make it easy to see what's working, and what needs your attention.

This utility guides you through troubleshooting by indicating whether the root cause is faulty equipment or resource overload.

Download a free trial of the Network Performance Monitor

 

Home Copyright © 1999-2009 Computer Performance LTD All rights reserved

Please report a broken link, or an error.