Compare-Object

Modul: Microsoft.PowerShell.Utility

Két objektumkészlet összehasonlítása.

Syntax

Compare-Object <PSObject> <PSObject> >] 

Description

A Compare-Object cmdlet két objektumkészletet hasonlít össze. Az egyik objektumkészlet a referencia,a másik objektumkészlet pedig a különbség.

Compare-Object ellenőrzi az egész objektum összehasonlítására rendelkezésre álló módszereket. Ha nem talál megfelelő módszert, meghívja a bemeneti objektumok ToString() metódusait, és összehasonlítja a stringeredményeket. Megadhat egy vagy több tulajdonságot az összehasonlításhoz. Ha tulajdonságokat ad meg, a cmdlet csak ezeknek a tulajdonságoknak az értékeit hasonlítja össze.

Az összehasonlítás eredménye jelzi, hogy egy tulajdonság értéke csak a referenciaobjektumban (<=) vagy csak a különbségobjektumban (=>) jelent meg. Ha az IncludeEqual paramétert használjuk, (==) jelzi, hogy az érték mindkét objektumban szerepel.

Ha a referencia- vagy a különbségobjektum null ($null), a Compare-Object megszüntető hibát generál.

Néhány példa splattingot használ a kódminták sorhosszának csökkentése érdekében. További információért lásd: A_plattingról.

Példák

1. példa – Két szövegfájl tartalmának összehasonlítása

Ez a példa két szövegfájl tartalmát hasonlítja össze. A példa a következő két szövegfájlt használja,ahol minden érték külön sorban van.

  • Testfile1.txt az alábbi értékeket tartalmazza: kutya, mókus és madár.
  • Testfile2.txt az alábbi értékeket tartalmazza: macska, madár és mosómedve.

A kimenet csak azokat a sorokat jeleníti meg, amelyek különböznek a fájlok között. A Testfile1.txt a referenciaobjektum (<=) és a Testfile2.txt a különbség objektum (=>). A mindkét fájlban megjelenő tartalommal rendelkező sorok nem jelennek meg.

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

2. példa – Minden tartalmi sor összehasonlítása és a különbségek kizárása

Ez a példa az ExcludeDifferent paramétert használja két szövegfájl minden tartalmi sorának összehasonlítására.

A PowerShell 7.1 óta az ExcludeDifferent paraméter használatakor az IncludeEqual paraméterre következtet, és a kimenet csak a két fájlban szereplő sorokat tartalmazza, amint azt a SideIndicator(==) mutatja.

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

3. példa – A különbség megjelenítése a PassThru paraméter használatakor

Normális esetben a Compare-Object egy PSCustomObject típust ad vissza a következő tulajdonságokkal:

  • Az összehasonlítandó InputObject
  • A SideIndicator tulajdonság, amely megmutatja, hogy a kimenet melyik bemeneti objektumhoz tartozik

A PassThru paraméter használatakor az objektum típusa nem változik, de a visszaadott objektum példánya kiegészül egy SideIndicator nevű NoteProperty-vel. A SideIndicatormegmutatja, hogy a kimenet melyik bemeneti objektumhoz tartozik.

A következő példák a különböző kimeneti típusokat mutatják.

$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===

A PassThru paraméter használata esetén az eredeti objektumtípus (System.Boolean) kerül visszaadásra. Figyeljük meg, hogy a System.Boolean objektumok alapértelmezett formátuma által megjelenített kimenet nem jelenítette meg aSideIndicator tulajdonságot. A visszaadott System.Boolean objektum azonban rendelkezik a hozzáadottNoteTulajdonsággal.

4. példa – Két egyszerű objektum összehasonlítása tulajdonságok használatával

Ez a példa két különböző, azonos hosszúságú karakterláncot hasonlít össze.

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

5. példa – Összetett objektumok összehasonlítása tulajdonságok használatával

Ez a példa az összetett objektumok összehasonlításakor mutatott viselkedést mutatja be. Ebben a példában két különböző folyamatobjektumot tárolunk a PowerShell különböző példányaihoz. Mindkét változó azonos nevű folyamatobjektumokat tartalmaz. Ha az objektumok összehasonlítása a Propertyparaméter megadása nélkül történik, a cmdlet az objektumokat azonosnak tekinti. Vegyük észre, hogy azInputObject értéke megegyezik a ToString() metódus eredményével. Mivel aSystem.Diagnostics.Process osztály nem rendelkezik az IComparable interfésszel, a cmdlet az objektumokat karakterláncokká alakítja, majd összehasonlítja az eredményeket.

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 <=

Az összehasonlítandó tulajdonságok megadásakor a cmdlet megjeleníti a különbségeket.

6. példa – IComparable-t megvalósító összetett objektumok összehasonlítása

Ha az objektum IComparable-t valósít meg, a cmdlet megkeresi az objektumok összehasonlításának módját.Ha azobjektumok különböző típusúak, a Difference objektumot aReferenceObject típusára konvertálja, majd összehasonlítja.

Ebben a példában egy stringet hasonlítunk össze egy TimeSpan objektummal. Az első esetben a stringet egy TimeSpan objektummá konvertáljuk, így az objektumok megegyeznek.

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 <=

A második esetben a TimeSpan karakterlánccá konvertálódik, így az objektumok különböznek.

Parameters

-CaseSensitive

Megjelöli, hogy az összehasonlításnak nagy- és kisbetű-érzékenynek kell lennie.

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

Meghatározza az összehasonlításokhoz használandó kultúrát.

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

Meghatározza a referenciaobjektumokkal összehasonlított objektumokat.

Type: PSObject
Position: 1
Default value: None
Accept pipeline input: True
Accept wildcard characters: False
-ExcludeDifferent

Megjelöli, hogy ez a cmdlet csak az összehasonlított objektumok azonos jellemzőit jeleníti meg. Az objektumok közötti különbségek elvetésre kerülnek.

Az ExcludeDifferent és az IncludeEqual használatával csak azokat a sorokat jeleníti meg, amelyek megegyeznek az egyező és a különböző objektumok között.

Ha az ExcludeDifferent az IncludeEqual nélkül van megadva, nincs kimenet.

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

IncludeEqual megjeleníti a referencia és a különbség objektumok közötti egyezéseket.

A kimenet alapértelmezés szerint a referencia- és különbségobjektumok közötti különbségeket is tartalmazza.

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

A PassThru paraméter használatakor a Compare-Object elhagyja a PSCustomObject burkolatot az összehasonlított objektumok körül, és változatlanul adja vissza az eltérő objektumokat.

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

Az összehasonlítandó referencia- és különbségobjektumok tulajdonságainak tömbjét adja meg.

A Property paraméter értéke egy új számított tulajdonság lehet. A számított tulajdonság lehet egy szkriptblokk vagy egy hash-tábla. Az érvényes kulcs-érték párok a következők:

  • Kifejezés – <string> vagy <script block>

Bővebb információért lásd: A_Calculated_Propertiesről.

Type: Object
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-ReferenceObject

Meghatározza az összehasonlításhoz referenciaként használt objektumok tömbjét.

Type: PSObject
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False
-SyncWindow

Meghatározza a szomszédos objektumok számát, amelyeket Compare-Object megvizsgál, miközben egyezést keres az objektumok gyűjteményében. A Compare-Object akkor vizsgálja meg a szomszédos objektumokat, ha nem találja az objektumot ugyanabban a pozícióban egy gyűjteményben. Az alapértelmezett érték ::MaxValue, ami azt jelenti, hogy a Compare-Object a teljes objektumgyűjteményt megvizsgálja.

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

Inputs

PSObject

A DifferenceObject paraméterbe egy objektumot küldhetünk a csővezetéken.

Kimenetek

None

Ha a referenciaobjektum és a különbségobjektum megegyezik, nincs kimenet, kivéve, ha az IncludeEqual paramétert használja.

PSCustomObject

Ha az objektumok különbözőek, Compare-Objecta különböző objektumokat egy PSCustomObjectwrapperbe csomagolja egy SideIndicator tulajdonsággal, hogy hivatkozzon a különbségekre.

A PassThru paraméter használata esetén az objektum típusa nem változik, de a visszaadott objektum példánya egy hozzáadott SideIndicator nevű NoteProperty-t kap. A SideIndicatormegmutatja, hogy a kimenet melyik bemeneti objektumhoz tartozik.

Notes

A PassThru paraméter használata esetén a konzolon megjelenített kimenet nem tartalmazhatja aSideIndicator tulajdonságot. ACompare-Object által kimenő objektumtípusra vonatkozó alapértelmezett formátum nézete nem tartalmazza a SideIndicator tulajdonságot. További információért lásd a 3. példát ebben a cikkben.

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.