Condividi tramite


Compare-Object

Confronta due set di oggetti.

Sintassi

Compare-Object
       [-ReferenceObject] <PSObject[]>
       [-DifferenceObject] <PSObject[]>
       [-SyncWindow <Int32>]
       [-Property <Object[]>]
       [-ExcludeDifferent]
       [-IncludeEqual]
       [-PassThru]
       [-Culture <String>]
       [-CaseSensitive]
       [<CommonParameters>]

Descrizione

Il Compare-Object cmdlet confronta due set di oggetti. Un set di oggetti è il riferimento e l'altro set di oggetti è la differenza.

Il risultato del confronto indica se un valore di proprietà è apparso solo nell'oggetto reference () o solo nell'oggetto differenza (=><=). Se viene usato il parametro IncludeEqual , (==) indica che il valore è in entrambi gli oggetti.

Se il riferimento o gli oggetti differenza sono Null ($null), Compare-Object genera un errore di terminazione.

Alcuni esempi usano splatting per ridurre la lunghezza della riga degli esempi di codice. Per altre informazioni, vedere about_Splatting. Gli esempi usano due file di testo, con ogni valore in una riga separata. Testfile1.txt contiene i valori: cane, scoiattolo e uccello. Testfile2.txt contiene i valori: gatto, uccello e racoon.

Esempio

Esempio 1: Confrontare il contenuto di due file di testo

In questo esempio vengono confrontati i contenuti di due file di testo. L'output visualizza solo le righe diverse tra i file. Testfile1.txtè l'oggetto reference () ed Testfile2.txtè l'oggetto differenza (=><=).

Le righe con contenuto visualizzato in entrambi i file non vengono visualizzate.

Compare-Object -ReferenceObject $(Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject $(Get-Content -Path C:\Test\Testfile2.txt)

InputObject SideIndicator
----------- -------------
cat         =>
racoon      =>
dog         <=
squirrel    <=

Esempio 2: Confrontare ogni riga di contenuto in due file di testo

In questo esempio viene usato IncludeEqual per confrontare ogni riga di contenuto in due file di testo. Vengono visualizzate tutte le righe di contenuto di entrambi i file.

SideIndicator specifica se la riga viene visualizzata nell'oggetto reference (), Testfile2.txt nell'oggetto Testfile1.txtdifferenza (=><=) o in entrambi i file (==).

$objects = @{
ReferenceObject = $(Get-Content -Path C:\Test\Testfile1.txt)
DifferenceObject = $(Get-Content -Path C:\Test\Testfile2.txt)
}
Compare-Object @objects -IncludeEqual

InputObject SideIndicator
----------- -------------
bird        ==
cat         =>
racoon      =>
dog         <=
squirrel    <=

Esempio 3: Confrontare ogni riga di contenuto ed escludere le differenze

In questo esempio vengono usati i parametri IncludeEqual e ExcludeDifferent per confrontare ogni riga di contenuto in due file di testo.

Poiché il comando usa il parametro ExcludeDifferent , l'output contiene solo righe contenute in entrambi i file, come illustrato da SideIndicator (==).

$objects = @{
ReferenceObject = $(Get-Content -Path C:\Test\Testfile1.txt)
DifferenceObject = $(Get-Content -Path C:\Test\Testfile2.txt)
}
Compare-Object @objects -IncludeEqual -ExcludeDifferent

InputObject SideIndicator
----------- -------------
bird        ==

Esempio 4: Confrontare due set di oggetti di processo

In questo esempio vengono confrontati due set di oggetti che contengono i processi in esecuzione del computer.

$Processes_Before = Get-Process
notepad.exe
$Processes_After = Get-Process
Compare-Object -ReferenceObject $Processes_Before -DifferenceObject $Processes_After

InputObject                            SideIndicator
-----------                            -------------
System.Diagnostics.Process (notepad)   =>

Il Get-Process cmdlet ottiene i processi in esecuzione del computer e li archivia nella $Processes_Before variabile.

Viene avviata l'applicazione notepad.exe .

Get-Process ottiene l'elenco aggiornato dei processi in esecuzione e li archivia nella $Processes_After variabile.

Confronto Compare-Object dei due set di oggetti di elaborazione archiviati nelle $Processes_Before variabili e $Processes_After . L'output visualizza la differenza, notepad.exe, dall'oggetto $Processes_After .

Parametri

-CaseSensitive

Indica che nei confronti è rilevante la distinzione tra maiuscole e minuscole.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Culture

Specifica le impostazioni cultura da usare per i confronti.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DifferenceObject

Specifica gli oggetti confrontati con gli oggetti di riferimento .

Type:PSObject[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ExcludeDifferent

Indica che questo cmdlet visualizza solo le caratteristiche degli oggetti confrontati uguali. Le differenze tra gli oggetti vengono rimosse.

Usare ExcludeDifferent con IncludeEqual per visualizzare solo le righe corrispondenti tra i riferimenti e gli oggetti di differenza .

Se ExcludeDifferent è specificato senza IncludeEqual, non è disponibile alcun output.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeEqual

IncludeEqual visualizza le corrispondenze tra gli oggetti di riferimento e differenza .

Per impostazione predefinita, l'output include anche le differenze tra i riferimenti e gli oggetti di differenza .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

Quando si usa il parametro PassThru , Compare-Object omette il wrapper PSCustomObject intorno agli oggetti confrontati e restituisce gli oggetti diversi, invariati.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Property

Specifica una matrice di proprietà degli oggetti di riferimento e differenza da confrontare .

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ReferenceObject

Specifica una matrice di oggetti usati come riferimento per il confronto.

Type:PSObject[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-SyncWindow

Specifica il numero di oggetti adiacenti che Compare-Object controllano durante la ricerca di una corrispondenza in una raccolta di oggetti. Compare-Object esamina gli oggetti adiacenti quando non trova l'oggetto nella stessa posizione in una raccolta. Il valore predefinito è [Int32]::MaxValue, il che significa che Compare-Object esamina l'intera raccolta di oggetti.

Type:Int32
Position:Named
Default value:[Int32]::MaxValue
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

PSObject

È possibile inviare un oggetto verso il basso della pipeline al parametro DifferenceObject .

Output

None

Se l'oggetto reference e l'oggetto differenza sono uguali, non è presente alcun output.

PSCustomObject

Se gli oggetti sono diversi, Compare-Object esegue il wrapping degli oggetti diversi in un PSCustomObject wrapper con una proprietà SideIndicator per fare riferimento alle differenze. Quando si usa il parametro PassThru , Compare-Object omette il PSCustomObject wrapper intorno agli oggetti confrontati e restituisce gli oggetti diversi, invariati.