Compare-Object
Két objektumkészletet hasonlít össze.
Syntax
Compare-Object
[-ReferenceObject] <PSObject[]>
[-DifferenceObject] <PSObject[]>
[-SyncWindow <Int32>]
[-Property <Object[]>]
[-ExcludeDifferent]
[-IncludeEqual]
[-PassThru]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Description
A Compare-Object
parancsmag két objektumkészletet hasonlít össze. Az egyik objektumkészlet a hivatkozás, a másik pedig a különbség.
Compare-Object
egy teljes objektum összehasonlítására használható módszereket keres. Ha nem talál megfelelő metódust, meghívja a bemeneti objektumok ToString() metódusait, és összehasonlítja a sztring eredményeit. Az összehasonlításhoz egy vagy több tulajdonságot is megadhat. A tulajdonságok megadásakor a parancsmag csak ezeknek a tulajdonságoknak az értékeit hasonlítja össze.
Az összehasonlítás eredménye azt jelzi, hogy egy tulajdonságérték csak a referenciaobjektumban (<=
) vagy csak a különbségobjektumban (=>
) jelent-e meg. Ha az IncludeEqual paramétert használja, (==
) azt jelzi, hogy az érték mindkét objektumban szerepel.
Ha a hivatkozás vagy a különbségobjektumok null értékűek ($null
), Compare-Object
végződési hibát okoz.
Néhány példa splatting használatával csökkenti a kódminták vonalhosszát. További információ: about_Splatting.
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, mindegyik érték egy külön sorban található.
Testfile1.txt
a következő értékeket tartalmazza: kutya, mókus és madár.Testfile2.txt
a következő értékeket tartalmazza: macska, madár és racoon.
A kimenet csak azokat a sorokat jeleníti meg, amelyek különböznek a fájloktól. Testfile1.txt
a referenciaobjektum (<=
) és Testfile2.txt
a különbségobjektum (=>
). A ké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 – Az egyes tartalomsorok ö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 egyes sorainak összehasonlítására.
A PowerShell 7.1-ben az ExcludeDifferent paraméter használatakor az IncludeEqual kikövetkeztetett, és a kimenet csak a két fájlban lévő sorokat tartalmazza, ahogyan azt a SideIndicator (==
) is mutatja.
$objects = @{
ReferenceObject = (Get-Content -Path C:\Test\Testfile1.txt)
DifferenceObject = (Get-Content -Path C:\Test\Testfile2.txt)
}
Compare-Object @objects -ExcludeDifferent
InputObject SideIndicator
----------- -------------
bird ==
3. példa – A Különbség megjelenítése a PassThru paraméter használatakor
Általában Compare-Object
egy PSCustomObject típust ad vissza a következő tulajdonságokkal:
- Az összehasonlítandó InputObject
- A SideIndicator tulajdonság, amely azt mutatja, hogy melyik bemeneti objektumhoz tartozik a kimenet
A PassThru paraméter használata esetén az objektum típusa nem változik, de a visszaadott objektum példánya hozzáadta a SideIndicator nevű NoteProperty paramétert. A SideIndicator megjeleníti, hogy melyik bemeneti objektumhoz tartozik a kimenet.
Az alábbi példák a különböző kimeneti típusokat mutatják be.
$a = $True
Compare-Object -IncludeEqual $a $a
(Compare-Object -IncludeEqual $a $a) | Get-Member
InputObject SideIndicator
----------- -------------
True ==
TypeName: System.Management.Automation.PSCustomObject
Name 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=True
SideIndicator NoteProperty string SideIndicator===
Compare-Object -IncludeEqual $a $a -PassThru
(Compare-Object -IncludeEqual $a $a -PassThru) | Get-Member
True
TypeName: System.Boolean
Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo(System.Object obj), int CompareTo(bool value), int IComparable.CompareTo(Syst
Equals Method bool Equals(System.Object obj), bool Equals(bool obj), bool IEquatable[bool].Equals(bool ot
GetHashCode 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.To
ToType 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[char] destination, [ref] int charsWritten)
SideIndicator NoteProperty string SideIndicator===
A PassThru használatakor a rendszer visszaadja az eredeti objektumtípust (System.Boolean). Figyelje meg, hogy a System.Boolean objektumok alapértelmezett formátuma által megjelenített kimenet nem jeleníti meg a SideIndicator tulajdonságot. A visszaadott System.Boolean objektumban azonban megjelenik a hozzáadott NoteProperty.
4. példa – Két egyszerű objektum összehasonlítása tulajdonságok használatával
Ebben a példában két különböző, azonos hosszúságú sztringet hasonlítunk össze.
Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqual
Length SideIndicator
------ -------------
3 ==
5. példa – Összetett objektumok összehasonlítása tulajdonságok használatával
Ez a példa az összetett objektumok összehasonlításának viselkedését 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 objektumokat a Tulajdonság paraméter megadása nélkül hasonlítja össze, a parancsmag egyenlőnek tekinti az objektumokat. Figyelje meg, hogy az InputObject értéke megegyezik a ToString() metódus eredményével. Mivel a System.Diagnostics.Process osztály nem rendelkezik az IComparable felülettel, a parancsmag sztringekké alakítja az objektumokat, 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 pwsh
PS> $a = Get-Process -Id 11168
PS> $b = Get-Process -Id 17600
PS> $a.ToString()
System.Diagnostics.Process (pwsh)
PS> $b.ToString()
System.Diagnostics.Process (pwsh)
PS> Compare-Object $a $b -IncludeEqual
InputObject SideIndicator
----------- -------------
System.Diagnostics.Process (pwsh) ==
PS> Compare-Object $a $b -Property ProcessName, Id, CPU
ProcessName Id CPU SideIndicator
----------- -- --- -------------
pwsh 17600 11.4375 =>
pwsh 11168 36.203125 <=
Az összehasonlítandó tulajdonságok megadásakor a parancsmag megjeleníti a különbségeket.
6. példa – Az IComparable-t implementáló összetett objektumok összehasonlítása
Ha az objektum megvalósítja az IComparable parancsmagot, a parancsmag megkeresi az objektumok összehasonlításának módjait. Ha az objektumok különböző típusúak, a Különbség objektum a ReferenceObject típusává lesz konvertálva, majd összehasonlítja.
Ebben a példában egy sztringet hasonlítunk össze egy TimeSpan objektummal. Az első esetben a sztringet a rendszer TimeSpan értékké alakítja, így az objektumok egyenlők.
Compare-Object ([TimeSpan]"0:0:1") "0:0:1" -IncludeEqual
InputObject SideIndicator
----------- -------------
00:00:01 ==
Compare-Object "0:0:1" ([TimeSpan]"0:0:1")
InputObject SideIndicator
----------- -------------
00:00:01 =>
0:0:1 <=
A második esetben a TimeSpan sztringgé alakul, így az objektum eltér.
Paraméterek
-CaseSensitive
Azt jelzi, hogy az összehasonlításoknak megkülönböztetik a kis- és nagybetűket.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Az összehasonlításhoz használandó kultúrát adja meg.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DifferenceObject
Megadja a referenciaobjektumokkal összehasonlított objektumokat.
Type: | PSObject[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-ExcludeDifferent
Azt jelzi, hogy ez a parancsmag csak az összehasonlított objektumok azonos jellemzőit jeleníti meg. A rendszer elveti az objektumok közötti különbségeket.
Az ExcludeDifferent és az IncludeEqual használatával csak a hivatkozás és a különbségobjektumok közötti vonalak jelennek meg.
Ha az ExcludeDifferent értéke IncludeEqual nélkül van megadva, nincs kimenet.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeEqual
Az IncludeEqual megjeleníti a hivatkozás és a különbségobjektumok közötti egyezéseket.
Alapértelmezés szerint a kimenet tartalmazza a hivatkozás és a különbségobjektumok közötti különbségeket is.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
A PassThru paraméter Compare-Object
használatakor kihagyja a PSCustomObject burkolót az összehasonlított objektumok köré, és változatlanul visszaadja a különböző objektumokat.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Az összehasonlítandó referencia- és különbségobjektumok tulajdonságainak tömbje.
A Tulajdonság paraméter értéke lehet egy új számított tulajdonság. A számított tulajdonság lehet szkriptblokk vagy kivonattábla. Az érvényes kulcs-érték párok a következők:
- Kifejezés –
<string>
vagy<script block>
További információ: about_Calculated_Properties.
Type: | Object[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReferenceObject
Az összehasonlításhoz referenciaként használt objektumtömböt adja meg.
Type: | PSObject[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SyncWindow
Megadja azoknak a szomszédos objektumoknak a számát, amelyek Compare-Object
egy objektumgyűjteményben keresnek egyezést. Compare-Object
Megvizsgálja a szomszédos objektumokat, ha nem találja az objektumot ugyanabban a helyzetben egy gyűjteményben. Az alapértelmezett érték az [Int32]::MaxValue
, ami azt jelenti, hogy Compare-Object
a teljes objektumgyűjteményt megvizsgálja.
Nagy gyűjtemények használata esetén előfordulhat, hogy az alapértelmezett érték nem hatékony, de pontos. Ha kisebb értéket ad meg a SyncWindow-hoz, az növelheti a teljesítményt, de kisebb pontosságot eredményezhet.
Type: | Int32 |
Position: | Named |
Default value: | [Int32]::MaxValue |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Bevitelek
A folyamaton belül elküldhet egy objektumot a DifferenceObject paraméternek.
Kimenetek
None
Alapértelmezés szerint ez a parancsmag nem ad vissza kimenetet, ha a ReferenceObject és az DifferenceObject azonos.
Ha az objektumok eltérőek, ez a parancsmag egy PSCustomObject burkolóban lévő különböző objektumokat egy SideIndicator tulajdonsággal burkolja, hogy hivatkozzon a különbségekre.
Ha az IncludeEqual paramétert használja, és az objektumok megegyeznek, a parancsmag a PSCustomObjectbeburkolt objektumokat adja vissza a SideIndicator tulajdonság beállításával==
.
A PassThru paraméter használata esetén az objektum típusa nem változik, de a visszaadott objektum példánya hozzáadta a SideIndicator nevű NoteProperty paramétert. A SideIndicator megjeleníti, hogy melyik bemeneti objektumhoz tartozik a kimenet.
Jegyzetek
A PowerShell a következő aliasokat Compare-Object
tartalmazza:
- Windows:
compare
diff
A PassThru paraméter használatakor előfordulhat, hogy a konzolon megjelenített kimenet nem tartalmazza a SideIndicator tulajdonságot. Az objektumtípus kimenetének alapértelmezett formátumnézete Compare-Object
nem tartalmazza a SideIndicator tulajdonságot. További információ: 3 . példa ebben a cikkben.
Kapcsolódó hivatkozások
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: