If you have a collection of objects and you want to remove any duplicate items, it is fairly simple.
# Create a collection with duplicate values
$Set1 = 1, 1, 2, 2, 3, 4, 5, 6, 7, 1, 2
# Remove the duplicate values.
$Set1 | Select-Object -Unique
1
2
3
4
5
6
7
What if you want only the duplicate values and nothing else?
# Create a collection with duplicate values
$Set1 = 1, 1, 2, 2, 3, 4, 5, 6, 7, 1, 2
#Create a second collection with duplicate values removed.
$Set2 = $Set1 | Select-Object -Unique
# Return only the duplicate values.
(Compare-Object -ReferenceObject $Set2 -DifferenceObject $Set1).InputObject | Select-Object –Unique
1
2
This works with objects as well as numbers. The first command creates a collection with 2 duplicates of both 1 and 2. The second command creates another collection with the duplicates filtered out. The Compare-Object cmdlet will first find items that are different between the two sets. By asking for the InputObject property, you will get those objects placed in the pipeline. Finally using the –Unique parameter of Select-Object, you filter any repeat objects. Without this final step, you will get
1
2
1
2
Comments