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.
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.
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 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 teach me more about how the system
itself 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
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*".
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: A Free tool from SolarWinds: Config Generator
Config Generator (CG) is a free tool, which puts you in charge of
controlling changes to network routers and other SNMP devices.
Boost your network performance by activating network device features
you've already paid for.
Guy says that for newbies the biggest benefit of this free tool is that
it will provide the impetus for you to learn more about configuring the SNMP
service with its 'Traps' and 'Communities'. This is a brand new free utility which Solarwinds released on January 26th
2010.
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
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.
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.
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.
Guy
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.