PowerShell -Filter WMI Parameter
PowerShell’s -filter is an alternative solution to the | Where-Object {$_.clause} when sieving data. Using -filter instead of ‘Where’ is a classic case of when you find a good technique, look for an even better modus operandi.
Topics for PowerShell Filters
♣
Preparation with PowerShell’s Get-Help
Before we use PowerShell’s -filter parameter, I suggest that we investigate the cmdlet with Get-Help. For example, Get-Help Get-WmiObject. My point is that we need to check that any particular cmdlet supports the -filter parameter.
# Help with PowerShell WMI object:
Get-Help Get-WmiObject -full
Note 1: If you prefer to see examples, this is why I append -full.
Note 2: Check other cmdlets such as Get-ChildItem (contains -filter) or Format-Table (no -filter parameter).
Example 1: PowerShell Filter Files
Here is a simple example to reduce the number of files displayed, we are only interested in those which are dlls.
# PowerShell Filter for dll files
Get-ChildItem -Path "C:\Windows\System32\" -filter *.dll
Example 2: PowerShell Get-WmiObject Filter
PowerShell’s -Filter uses the syntax of the WMI Query Language (WQL), which is a subset of SQL. One point to clarify is that WQL uses ‘traditional’ operators such as "=", whereas PowerShell uses "-eq".
a) Preliminary: No Filter
# PowerShell Get-WmiObject
Win32_NetworkAdapterConfiguration |
Format-Table IPAddress, DefaultIPGateway, MACAddress -auto
Note 3: The problem could be too many items, or a mixed bag results. Suppose that we wanted to perform an operation on only some of the returned items? The answer is to employ PowerShell and filter the output.
b) Same Command, but Filtered for IpEnabled Adapters
# PowerShell Get-WmiObject Filter
Clear-Host
Get-WmiObject -class Win32_NetworkAdapterConfiguration -Filter "IpEnabled = 'True' " |
Format-Table IPAddress, DefaultIPGateway, MACAddress -auto
Note 4: Remember the "Double Quotes" around your -Filter parameter.
Note 5: = ‘True’, or =’False’ is correct. WQL does not understand PowerShell’s -eq or -ne.
Note 6: -Filter is technically superior to methods such as ‘Where’ or ‘Include’ because it sifts the objects as it retrieves them. See more on the PowerShell -Filter command.
c) PowerShell Where-Object for Comparison with Above -Filter
# PowerShell Get-WmiObject -Filter replaced with where-Object
Get-WmiObject -class Win32_NetworkAdapterConfiguration |
Where-Object {$_.IpEnabled -eq ‘True’} |
Format-Table IPAddress, DefaultIPGateway, MACAddress -auto
Note 7: Where-Object achieves exactly the same result, but it needs an extra pipe (|). My problem is remembering the $_. syntax. I often forget the _ as in: $.IpEnabled. PowerShell -filter output is shorter than the where-Object clause.
Guy Recommends: Free WMI Monitor for PowerShell![Solarwinds Free WMI Monitor for PowerShell](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDUiIGhlaWdodD0iMTQyIiB2aWV3Qm94PSIwIDAgMjA1IDE0MiI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=)
Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft’s operating systems. Fortunately, SolarWinds have created a Free WMI Monitor so that you can discover these gems of performance information, and thus improve your PowerShell scripts.
Take the guess work 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.
Download your free copy of WMI Monitor
Example 3: Logical Disk Filter
# PowerShell filter for disks
Get-WmiObject -Class Win32_LogicalDisk -Filter "MediaType=12"
Note 8: MediaType 12 for LogicalDisk means ‘Fixed hard disk media’ as opposed to floppy.
Example 4: WMI Filter GPO
WMI Filters allow you to select only computers that meet your chosen criteria. Naturally, your Group Policy will only apply to the objects that match your filter. Here is a WMI GPO filter for Windows 7
Select * from Win32_OperatingSystem WHERE Version like "6.1%" AND ProductType="1"
Note 9: The Keyword is Win32_OperatingSystem.
Note 10: 6.0% would be Vista, and 6.2% is Windows 8.
See more on WMI GPO Filtering »
Summary of PowerShell -Filter
When you need to sift data you have a choice between a where-Object clause and a -Filter parameter. The -Filter solution is easier and probably quicker. PowerShell’s -Filter parameter looks for a WMI Query Language (WQL) statement.
If you like this page then please share it with your friends
See more examples of PowerShell Parameters
• PowerShell Parameters • Syntax • PowerShell functions • PowerShell Wmi Filter
• PowerShell -confirm • WhatIf • -Match • -Like • Where • Free WMI Monitor
• PowerShell -Filter Command • PowerShell Filter • -Replace • Windows PowerShell
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.