Tramite il comando Compare-Object di PowerShell è possibile comparare due array per vedere se il loro contenuto corrisponde
PowerShell
$r=@(1,26,4,15,33,7)
$d=@(26,4,1,15,7,33)

Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual
da come risultato
InputObject SideIndicator
----------- -------------
         26 ==
          1 ==
          4 ==
         15 ==
         33 ==
          7 ==
se si omette il parametro IncludeEqual è possibile verificare se i due array sono identici confrontando il risultato con $null
PowerShell
$c = Compare-Object -ReferenceObject $r -DifferenceObject $d
$isEqual = $null -eq $c
Write-host $isEqual # ritorna $True
Il confronto avviene per valori contenuti anche se, come nell'esempio, gli elementi compaiono in ordine diverso.
variando un elemento il confronto fallisce
C#
$r=@(1,26,4,15,33,7)
$d=@(26,4,1,15,7,5)

Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual
da come risultato
InputObject SideIndicator
----------- -------------
         26 ==
          1 ==
          4 ==
         15 ==
          7 ==
          5 =>
         33 <=
Notare i simboli ==, => e <= che indicano uguaglianza o la presenza dell'elemento solo su uno dei due array.
In questo caso il confronto con $null darà $False
PowerShell
$c = Compare-Object -ReferenceObject $r -DifferenceObject $d
$isEqual = $null -eq $c
Write-host $isEqual # ritorna $False

Nel caso di stringhe posso fare un confronto case insensitive
PowerShell
$r=@("a", "Z", "d", "T")
$d=@("z", "D", "a", "T")

Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual
InputObject SideIndicator
----------- -------------
Z           ==
a           ==
d           ==
T           ==
oppure case sensitive con il parametro CaseSensitive
PowerShell
Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual -CaseSensitive
InputObject SideIndicator
----------- -------------
a           ==
T           ==
z           =>
D           =>
Z           <=
d           <=

Nel caso di oggetti (PSObject ) la comparazione avviene specificando il nome di una o più proprietà
PowerShell
$r =  New-Object PSObject -Property @{ p1 = "a"; p2 = "Z";  P3 = "s"; }
$d =  New-Object PSObject -Property @{ P1 = "A"; p2 = "Z";  P4 = "W"; }

Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual -Property p1 -CaseSensitive
p1 SideIndicator
-- -------------
A  =>
a  <=
nel caso di più proprietà si può passare un array con i nomi
PowerShell
Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual -Property @("p1","p3")
p1 p3 SideIndicator
-- -- -------------
A     =>
a  s  <=
Potrebbe interessarti anche: