Confrontare due oggetti in PowerShell
Tramite il comando Compare-Object di PowerShell è possibile comparare due array per vedere se il loro contenuto corrisponde
da come risultato
se si omette il parametro IncludeEqual è possibile verificare se i due array sono identici confrontando il risultato con $null
da come risultato
Nel caso di stringhe posso fare un confronto case insensitive
oppure case sensitive con il parametro CaseSensitive
Nel caso di oggetti (PSObject ) la comparazione avviene specificando il nome di una o più proprietà
nel caso di più proprietà si può passare un array con i nomi
PowerShell
$r=@(1,26,4,15,33,7)
$d=@(26,4,1,15,7,33)
Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual
Text
InputObject SideIndicator
----------- -------------
26 ==
1 ==
4 ==
15 ==
33 ==
7 ==
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 fallisceC#
$r=@(1,26,4,15,33,7)
$d=@(26,4,1,15,7,5)
Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual
Text
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à $FalsePowerShell
$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
Text
InputObject SideIndicator
----------- -------------
Z ==
a ==
d ==
T ==
PowerShell
Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual -CaseSensitive
Text
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
Text
p1 SideIndicator
-- -------------
A =>
a <=
PowerShell
Compare-Object -ReferenceObject $r -DifferenceObject $d -IncludeEqual -Property @("p1","p3")
Text
p1 p3 SideIndicator
-- -- -------------
A =>
a s <=