-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathCompare-ObjectSetIntersection.ps1
67 lines (60 loc) · 2.1 KB
/
Compare-ObjectSetIntersection.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function Compare-ObjectSetIntersection {
<#
.SYNOPSIS
Compares 2 arrays of strings and returns The SET INTERSECTION of the arrays
.DESCRIPTION
Compares 2 arrays of strings and returns The SET INTERSECTION of the arrays. Optionally case sensitive.
.PARAMETER ReferenceObject
The array that is the baseline. Aliased to 'RO', 'Left'
.PARAMETER DifferenceObject
The array that is being compared to the baseline set. Aliased to 'DO', 'Right'
.PARAMETER CaseSensitive
Switch indicating that a case sensitive comparison should be made. Aliased to 'CS'
.EXAMPLE
Compare-ObjectSetIntersection -ReferenceObject a,b,c -DifferenceObject a,c -CaseSensitive
a
c
.EXAMPLE
Compare-ObjectSetIntersection -ReferenceObject a,b,c -DifferenceObject a,b,C -CaseSensitive
a
b
.EXAMPLE
Compare-ObjectSetIntersection -ReferenceObject a,b,c -DifferenceObject a,b,c,D
a
b
c
.EXAMPLE
Compare-ObjectSetIntersection -ReferenceObject a,b,c -DifferenceObject a,b,C
a
b
c
.NOTES
Inspired by:
https://sqljana.wordpress.com/2015/09/23/perform-set-operations-union-intersection-minus-complement-using-powershell/
http://www.cs.odu.edu/~toida/nerzic/content/set/set_operations.html
http://www.dummies.com/how-to/content/find-the-union-intersection-relative-complement-an.html
#>
[CmdletBinding()]
[OutputType('psobject')]
param (
[Alias('RO', 'Left')]
[string[]] $ReferenceObject,
[Alias('DO', 'Right')]
[string[]] $DifferenceObject,
[Alias('CS')]
[switch] $CaseSensitive
)
begin {
Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]"
}
process {
if ($CaseSensitive) {
Compare-Object -ReferenceObject $ReferenceObject -DifferenceObject $DifferenceObject -Passthru -IncludeEqual -ExcludeDifferent -CaseSensitive
} else {
Compare-Object -ReferenceObject $ReferenceObject -DifferenceObject $DifferenceObject -Passthru -IncludeEqual -ExcludeDifferent
}
}
end {
Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]"
}
}