Chapter 22. Comparing Data
Introduction
When you’re working in PowerShell, it is common to work with
collections of objects. Most PowerShell commands generate objects, as do
many of the methods that you work with in the .NET Framework. To help you
work with these object collections, PowerShell introduces the Compare-Object
cmdlet. The Compare-Object
cmdlet provides functionality
similar to the well-known diff
commands, but with an object-oriented flavor.
Compare the Output of Two Commands
Problem
You want to compare the output of two commands.
Solution
To compare the output of two commands, store
the output of each command in variables, and then use the Compare-Object
cmdlet to compare those
variables:
PS > notepad PS > $processes = Get-Process PS > Stop-Process -ProcessName Notepad PS > $newProcesses = Get-Process PS > Compare-Object $processes $newProcesses InputObject SideIndicator ----------- ------------- System.Diagnostics.Process (notepad) <=
Discussion
The Solution shows how to determine which
processes have exited between the two calls to Get-Process
. The SideIndicator
of <=
tells us that the process was present in
the left collection ($processes
) but
not in the right ($newProcesses
). To
work with the actual object that was different, access the InputObject
property:
PS > $diff = @(Compare-Object $processes $newProcesses)[0] PS > $process = $diff.InputObject PS > $process.Handles 55
By default, the Compare-Object
cmdlet uses the comparison functionality built into most .NET objects. ...
Get Windows PowerShell Cookbook, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.