Bird
Raised Fist0
PowerShellscripting~5 mins

Compare-Object for differences in PowerShell

Choose your learning style10 modes available
Introduction
Compare-Object helps you find what is different between two sets of things, like lists or files. It shows what is only in one set or the other.
You want to see which files are different between two folders.
You need to find which names are in one list but not in another.
You want to check if two sets of data have any differences.
You want to compare configuration settings from two sources.
You want to quickly spot changes between two versions of a list.
Syntax
PowerShell
Compare-Object -ReferenceObject <Object[]> -DifferenceObject <Object[]> [-Property <string[]>] [-IncludeEqual] [-PassThru]
ReferenceObject is the first list or set you compare from.
DifferenceObject is the second list or set you compare to.
Examples
Compares two lists and shows differences.
PowerShell
Compare-Object -ReferenceObject $list1 -DifferenceObject $list2
Shows both differences and items that are the same.
PowerShell
Compare-Object -ReferenceObject $list1 -DifferenceObject $list2 -IncludeEqual
Outputs only the differing objects without extra info.
PowerShell
Compare-Object -ReferenceObject $list1 -DifferenceObject $list2 -PassThru
Sample Program
This script compares two fruit lists and shows which fruits are unique to each list.
PowerShell
$list1 = @('apple', 'banana', 'cherry')
$list2 = @('banana', 'cherry', 'date')
Compare-Object -ReferenceObject $list1 -DifferenceObject $list2
OutputSuccess
Important Notes
SideIndicator shows where the item is: '<=' means only in ReferenceObject, '=>' means only in DifferenceObject.
If you want to compare complex objects, use the -Property parameter to specify which property to compare.
Use -IncludeEqual if you want to see items that are the same in both lists.
Summary
Compare-Object finds differences between two sets of data.
It shows which items are unique to each set with a clear indicator.
You can customize output with options like -IncludeEqual and -PassThru.

Practice

(1/5)
1. What does the PowerShell cmdlet Compare-Object primarily do?
easy
A. It sorts a list of objects alphabetically.
B. It compares two sets of objects and shows their differences.
C. It merges two lists into one combined list.
D. It deletes duplicate items from a list.

Solution

  1. Step 1: Understand the purpose of Compare-Object

    Compare-Object is designed to find differences between two collections of objects.
  2. Step 2: Identify what it outputs

    It outputs which items are unique to each set, showing differences clearly.
  3. Final Answer:

    It compares two sets of objects and shows their differences. -> Option B
  4. Quick Check:

    Compare-Object = Shows differences [OK]
Hint: Compare-Object shows differences between two lists [OK]
Common Mistakes:
  • Thinking it merges lists instead of comparing
  • Confusing it with sorting or filtering commands
  • Assuming it removes duplicates
2. Which of the following is the correct syntax to compare two arrays $a and $b using Compare-Object?
easy
A. Compare-Object $a -RefObject $b
B. Compare-Object -Reference $a -Difference $b
C. Compare-Object -DifferenceObject $a -ReferenceObject $b
D. Compare-Object -ReferenceObject $a -DifferenceObject $b

Solution

  1. Step 1: Recall parameter names for Compare-Object

    The cmdlet uses -ReferenceObject for the first set and -DifferenceObject for the second set.
  2. Step 2: Match correct parameter order

    Correct syntax is Compare-Object -ReferenceObject $a -DifferenceObject $b.
  3. Final Answer:

    Compare-Object -ReferenceObject $a -DifferenceObject $b -> Option D
  4. Quick Check:

    ReferenceObject first, DifferenceObject second [OK]
Hint: Use -ReferenceObject first, then -DifferenceObject [OK]
Common Mistakes:
  • Swapping parameter names
  • Using positional parameters incorrectly
  • Omitting parameter names causing confusion
3. Given the following code:
$a = 1, 2, 3, 4
$b = 3, 4, 5, 6
Compare-Object -ReferenceObject $a -DifferenceObject $b

What is the output?
medium
A. 3 and 4 with SideIndicator '<=', 5 and 6 with SideIndicator '=>'
B. 1, 2, 3, 4, 5, 6 all with SideIndicator '=='
C. 1 and 2 with SideIndicator '<=', 5 and 6 with SideIndicator '=>'
D. No output because all items match

Solution

  1. Step 1: Identify unique items in each array

    $a has 1, 2 unique; $b has 5, 6 unique; 3 and 4 are common.
  2. Step 2: Understand SideIndicator meaning

    Items only in $a show '<='; items only in $b show '=>'.
  3. Final Answer:

    1 and 2 with SideIndicator '<=', 5 and 6 with SideIndicator '=>' -> Option C
  4. Quick Check:

    Unique items show with correct SideIndicator [OK]
Hint: SideIndicator '<=' means only in ReferenceObject [OK]
Common Mistakes:
  • Including common items in output
  • Mixing up SideIndicator symbols
  • Assuming no output if some items match
4. You run this code:
$list1 = 'apple', 'banana', 'cherry'
$list2 = 'banana', 'cherry', 'date'
Compare-Object $list1 $list2 -IncludeEqual

But you get an error. What is the likely cause?
medium
A. Missing parameter names -ReferenceObject and -DifferenceObject
B. The -IncludeEqual parameter is not valid for Compare-Object
C. The arrays contain strings, which Compare-Object cannot handle
D. The syntax is correct; error is from elsewhere

Solution

  1. Step 1: Check parameter usage

    Compare-Object requires named parameters -ReferenceObject and -DifferenceObject when using switches like -IncludeEqual.
  2. Step 2: Verify syntax validity

    Positional arguments do not bind correctly with -IncludeEqual; missing parameter names cause error.
  3. Final Answer:

    Missing parameter names -ReferenceObject and -DifferenceObject -> Option A
  4. Quick Check:

    Named parameters required with -IncludeEqual [OK]
Hint: Use named parameters with -IncludeEqual to avoid errors [OK]
Common Mistakes:
  • Thinking named parameters are not required with switches
  • Believing -IncludeEqual is invalid
  • Assuming strings cannot be compared
5. You have two lists:
$oldList = 'red', 'green', 'blue', 'yellow'
$newList = 'green', 'blue', 'purple', 'yellow'

You want to find items removed and added, but also keep items unchanged. Which command will do this?
hard
A. Compare-Object -ReferenceObject $oldList -DifferenceObject $newList -IncludeEqual
B. Compare-Object $oldList $newList -PassThru
C. Compare-Object -ReferenceObject $newList -DifferenceObject $oldList
D. Compare-Object -ReferenceObject $oldList -DifferenceObject $newList -ExcludeDifferent

Solution

  1. Step 1: Understand the goal

    You want to see added, removed, and unchanged items clearly.
  2. Step 2: Use -IncludeEqual to show unchanged items

    The -IncludeEqual option adds items that are the same in both lists to the output.
  3. Step 3: Confirm correct parameter usage

    Use -ReferenceObject for old list and -DifferenceObject for new list to see changes from old to new.
  4. Final Answer:

    Compare-Object -ReferenceObject $oldList -DifferenceObject $newList -IncludeEqual -> Option A
  5. Quick Check:

    -IncludeEqual shows unchanged items [OK]
Hint: Add -IncludeEqual to see unchanged items too [OK]
Common Mistakes:
  • Omitting -IncludeEqual and missing unchanged items
  • Swapping ReferenceObject and DifferenceObject
  • Using invalid parameters like -ExcludeDifferent
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard