Compare-Object

Module: Microsoft.PowerShell.Utility

Vergelijkt twee sets objecten.

Syntax

Compare-Object <PSObject> <PSObject> >] 

Description

Het Compare-Object cmdlet vergelijkt twee sets objecten. Een set objecten is de referentie, en de andere set objecten is het verschil.

Compare-Object controleert of er methoden beschikbaar zijn om een geheel object te vergelijken. Als er geen geschikte methode wordt gevonden, worden de methoden ToString() van de invoerobjecten aangeroepen en worden de stringresultaten vergeleken. U kunt een of meer eigenschappen opgeven die voor de vergelijking moeten worden gebruikt. Wanneer eigenschappen worden opgegeven, vergelijkt het cmdlet alleen de waarden van die eigenschappen.

Het resultaat van de vergelijking geeft aan of een waarde van een eigenschap alleen voorkomt in het referentie-object (<=) of alleen in het verschil-object (=>). Indien de parameter IncludeEqual wordt gebruikt, geeft (==) aan dat de waarde in beide objecten voorkomt.

Indien de referentie- of de verschilobjecten null zijn ($null), genereert Compare-Object een terminerende fout.

Sommige voorbeelden gebruiken splatting om de regellengte van de codevoorbeelden te beperken. Voor meer informatie, zieabout_Splatting.

Voorbeelden

Voorbeeld 1 – Vergelijk de inhoud van twee tekstbestanden

Dit voorbeeld vergelijkt de inhoud van twee tekstbestanden. Het voorbeeld gebruikt de volgende twee tekst bestanden, met elke waarde op een aparte regel.

  • Testfile1.txt bevat de waarden: hond, eekhoorn, en vogel.
  • Testfile2.txt bevat de waarden: kat, vogel, en wasbeer.

De uitvoer toont alleen de regels die verschillend zijn tussen de bestanden. Testfile1.txt is hetference object (<=) en Testfile2.txt is het difference object (=>). Regels met inhoud die in beide bestanden voorkomen, worden niet weergegeven.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject (Get-Content -Path C:\Test\Testfile2.txt)InputObject SideIndicator----------- -------------cat =>racoon =>dog <=squirrel <=

Voorbeeld 2 – Vergelijk elke regel inhoud en sluit de verschillen uit

Dit voorbeeld gebruikt de parameter UitsluitenVerschil om elke regel met inhoud in twee tekstbestanden te vergelijken.

Vanaf PowerShell 7.1, wanneer de parameter ExcludeDifferent wordt gebruikt, wordt IncludeEqual afgeleid en bevat de uitvoer alleen regels die in beide bestanden voorkomen, zoals wordt getoond door de SideIndicator(==).

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

Voorbeeld 3 – Laat het verschil zien bij gebruik van de PassThru-parameter

Normaal gesproken retourneert Compare-Object een PSCustomObject-type met de volgende eigenschappen:

  • Het InputObject dat wordt vergeleken
  • De eigenschap SideIndicator die aangeeft bij welk inputobject de output hoort

Wanneer u de parameter PassThru gebruikt, wordt het Type van het object niet gewijzigd, maar de instantie van het geretourneerde object heeft een toegevoegde NoteProperty met de naam SideIndicator. SideIndicator laat zien bij welk invoerobject de uitvoer hoort.

De volgende voorbeelden laten de verschillende soorten uitvoer zien.

$a = $TrueCompare-Object -IncludeEqual $a $a(Compare-Object -IncludeEqual $a $a) | Get-MemberInputObject SideIndicator----------- ------------- True == TypeName: System.Management.Automation.PSCustomObjectName MemberType Definition---- ---------- ----------Equals Method bool Equals(System.Object obj)GetHashCode Method int GetHashCode()GetType Method type GetType()ToString Method string ToString()InputObject NoteProperty System.Boolean InputObject=TrueSideIndicator NoteProperty string SideIndicator===Compare-Object -IncludeEqual $a $a -PassThru(Compare-Object -IncludeEqual $a $a -PassThru) | Get-MemberTrue TypeName: System.BooleanName MemberType Definition---- ---------- ----------CompareTo Method int CompareTo(System.Object obj), int CompareTo(bool value), int IComparable.CompareTo(SystEquals Method bool Equals(System.Object obj), bool Equals(bool obj), bool IEquatable.Equals(bool otGetHashCode Method int GetHashCode()GetType Method type GetType()GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider)ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider)ToChar Method char IConvertible.ToChar(System.IFormatProvider provider)ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provider)ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider)ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider)ToInt16 Method short IConvertible.ToInt16(System.IFormatProvider provider)ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider)ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider)ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider)ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider)ToString Method string ToString(), string ToString(System.IFormatProvider provider), string IConvertible.ToToType Method System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)ToUInt16 Method ushort IConvertible.ToUInt16(System.IFormatProvider provider)ToUInt32 Method uint IConvertible.ToUInt32(System.IFormatProvider provider)ToUInt64 Method ulong IConvertible.ToUInt64(System.IFormatProvider provider)TryFormat Method bool TryFormat(System.Span destination, int charsWritten)SideIndicator NoteProperty string SideIndicator===

Wanneer u PassThru gebruikt, wordt het oorspronkelijke objecttype (System.Boolean) geretourneerd. Merk op hoe de uitvoer die wordt weergegeven door het standaardformaat voor System.Boolean-objecten de eigenschapSideIndicator niet weergeeft. Het geretourneerde System.Boolean object heeft echter de toegevoegdeNoteProperty.

Example 4 – Twee eenvoudige objecten vergelijken met behulp van properties

In dit voorbeeld vergelijken we twee verschillende strings die dezelfde lengte hebben.

Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqualLength SideIndicator------ ------------- 3 ==

Example 5 – Complexe objecten vergelijken met behulp van properties

Dit voorbeeld toont het gedrag bij het vergelijken van complexe objecten. In dit voorbeeld slaan we twee verschillende procesobjecten op voor verschillende instanties van PowerShell. Beide variabelen bevatten procesobjecten met dezelfde naam. Wanneer de objecten worden vergeleken zonder de Propertyparameter op te geven, beschouwt het cmdlet de objecten als gelijk. Merk op dat de waarde van hetInputObject gelijk is aan het resultaat van de methode ToString(). Aangezien de klasseSystem.Diagnostics.Process niet over de interface IComparable beschikt, converteert het cmdlet de objecten naar strings en vergelijkt vervolgens de resultaten.

PS> Get-Process pwsh NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 101 123.32 139.10 35.81 11168 1 pwsh 89 107.55 66.97 11.44 17600 1 pwshPS> $a = Get-Process -Id 11168PS> $b = Get-Process -Id 17600PS> $a.ToString()System.Diagnostics.Process (pwsh)PS> $b.ToString()System.Diagnostics.Process (pwsh)PS> Compare-Object $a $b -IncludeEqualInputObject SideIndicator----------- -------------System.Diagnostics.Process (pwsh) ==PS> Compare-Object $a $b -Property ProcessName, Id, CPUProcessName Id CPU SideIndicator----------- -- --- -------------pwsh 17600 11.4375 =>pwsh 11168 36.203125 <=

Wanneer u eigenschappen opgeeft die vergeleken moeten worden, toont het cmdlet de verschillen.

Voorbeeld 6 – Vergelijken van complexe objecten die IComparable implementeren

Indien het object IComparable implementeert, zoekt het cmdlet naar manieren om de objecten te vergelijken.Indien de objecten van verschillend type zijn, wordt het Difference object geconverteerd naar het type van hetReferenceObject en vervolgens vergeleken.

In dit voorbeeld vergelijken we een string met een TimeSpan object. In het eerste geval wordt de string geconverteerd naar een TimeSpan, zodat de objecten gelijk zijn.

Compare-Object ("0:0:1") "0:0:1" -IncludeEqualInputObject SideIndicator----------- -------------00:00:01 ==Compare-Object "0:0:1" ("0:0:1")InputObject SideIndicator----------- -------------00:00:01 =>0:0:1 <=

In het tweede geval wordt de TimeSpan geconverteerd naar een string, zodat de objecten verschillend zijn.

Parameters

-CaseSensitive

Geeft aan dat de vergelijkingen hoofdlettergevoelig moeten zijn.

Type: SwitchParameter
Positie: Naam
Voorkeurwaarde: Valse
Accepteer invoer via pijplijn: False
Accept wildcard characters: False
-Culture

Specificeert de cultuur die voor vergelijkingen moet worden gebruikt.

Type: String
Position: Named
Default value: None
Accepteer invoer via pijplijn: False
Accept wildcard characters: False
-DifferenceObject

Specificeert de objecten die vergeleken worden met de referentieobjecten.

Type: PSObject
Positie: 1
Voorkeurwaarde: None
Accepteer invoer via pijplijn: True
Accept wildcard characters: False
-ExcludeDifferent

Geeft aan dat dit cmdlet alleen de kenmerken weergeeft van vergeleken objecten die gelijk zijn. De verschillen tussen de objecten worden genegeerd.

Gebruik ExcludeDifferent met IncludeEqual om alleen de regels weer te geven die overeenkomen tussen erference en difference objecten.

Als ExcludeDifferent is opgegeven zonder IncludeEqual, is er geen uitvoer.

Type: SwitchParameter
Positie: Naam
Voorkeurwaarde: Valse
Accepteer pijplijninvoer: False
Accept wildcard characters: False
-IncludeEqual

IncludeEqual geeft de overeenkomsten weer tussen de referentie- en verschilobjecten.

De standaardinstelling is dat de uitvoer ook de verschillen tussen de referentie- en verschilobjecten bevat.

Type: SwitchParameter
Positie: Naam
Voorkeurwaarde: Valse
Accept pipeline input: False
Accept wildcard characters: False
-PassThru

Wanneer u de PassThru parameter gebruikt, Compare-Object laat de PSCustomObject wrapper rond de vergeleken objecten weg en retourneert de verschillende objecten, ongewijzigd.

Type: SwitchParameter
Positie: Naam
Voorkeurwaarde: Valse
Accepteer invoer via pijplijn: False
Accepteer jokertekens: False
-Property

Specificeert een array van eigenschappen van de referentie- en verschilobjecten om te vergelijken.

De waarde van de parameter Property kan een nieuwe berekende eigenschap zijn. De berekende eigenschap kan een scriptblok of een hashtabel zijn. Geldige sleutel-waardeparen zijn:

  • Expressie – <string> of <script block>

Voor meer informatie, zieabout_Calculated_Properties.

Type: Object
Positie: Naam
Voorkeurwaarde: None
Accepteer invoer via pijplijn: Valse
Accepteer jokertekens: False
-ReferenceObject

Specificeert een array van objecten die worden gebruikt als referentie voor vergelijking.

Type: PSObject
Positie: 0
Voorkeurwaarde: None
Accepteer invoer via pijplijn: Valse
Accepteer jokertekens: False
-SyncWindow

Specificeert het aantal aangrenzende objecten dat Compare-Object inspecteert bij het zoeken naar een overeenkomst in een verzameling van objecten. Compare-Object onderzoekt aangrenzende objecten wanneer het een object op dezelfde positie in een verzameling niet kan vinden. De standaardwaarde is ::MaxValue, hetgeen betekent datCompare-Object de gehele objectenverzameling onderzoekt.

Type: Int32
Positie: Naam
Standaard waarde: ::MaxValue
Accepteer invoer via pijplijn: False
Accept wildcard characters: False

Inputs

PSObject

U kunt een object door de pijplijn sturen naar de parameter DifferenceObject.

Outputs

None

Als het referentie-object en het verschil-object hetzelfde zijn, is er geen output, tenzij u de parameter IncludeEqual gebruikt.

PSCustomObject

Als de objecten verschillend zijn, Compare-Objectwikkelt u de verschillende objecten in een PSCustomObjectwrapper met een eigenschap SideIndicator om naar de verschillen te verwijzen.

Wanneer u de parameter PassThru gebruikt, wordt het Type van het object niet gewijzigd, maar de instantie van het geretourneerde object krijgt een toegevoegde eigenschap NoteProperty met de naam SideIndicator. SideIndicator laat zien bij welk invoerobject de uitvoer hoort.

Notes

Wanneer u de parameter PassThru gebruikt, kan het zijn dat de uitvoer die in de console wordt weergegeven de eigenschapSideIndicator niet bevat. De standaardopmaakweergave van de voor het objecttype uitvoer doorCompare-Object bevat de eigenschap SideIndicator niet. Zie Voorbeeld 3 in dit artikel voor meer informatie.

  • about_Calculated_Properties
  • ForEvery-Object
  • Group-Object
  • Measure-Object
  • New-Object
  • Select-Object
  • Sort-Object
  • Tee-Object
  • Where-Object
  • Get-Process

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.