Vertailee kahta objektijoukkoa.
- Syntax
- Description
- Esimerkkejä
- Esimerkki 1 – Kahden tekstitiedoston sisällön vertailu
- Esimerkki 2 – Vertaillaan jokaista sisältöriviä ja jätetään erot pois
- Esimerkki 3 – Näytä ero, kun käytetään PassThru -parametria
- Esimerkki 4 – Kahden yksinkertaisen objektin vertailu ominaisuuksien avulla
- Esimerkki 5 – Monimutkaisten objektien vertailu ominaisuuksien avulla
- Esimerkki 6 – Monimutkaisten IComparable-toteuttavien objektien vertailu
- Parameters
- Syötteet
- Outputs
- Notes
Syntax
Compare-Object <PSObject> <PSObject> >]
Description
Cmdlet Compare-Object
vertaa kahta objektijoukkoa. Toinen objektijoukko on viite,ja toinen objektijoukko on erotus.
Compare-Object
tarkistaa käytettävissä olevat menetelmät koko objektin vertailuun. Jos se ei löydä sopivaa menetelmää, se kutsuu syötettävien objektien ToString()-metodeja ja vertaa merkkijonotuloksia. Voit antaa yhden tai useamman vertailussa käytettävän ominaisuuden. Kun ominaisuudet annetaan, cmdlet vertaa vain näiden ominaisuuksien arvoja.
Vertailun tulos osoittaa, esiintyikö ominaisuuden arvo vain viiteobjektissa (<=
) vai vain eroobjektissa (=>
). Jos IncludeEqual-parametria käytetään, (==
) ilmaisee, että arvo on molemmissa objekteissa.
Jos viite- tai eroobjekti on nolla ($null
), Compare-Object
tuottaa lopetusvirheen.
Joissain esimerkeissä käytetään splattingia koodinäytteiden rivien pituuden vähentämiseksi. Lisätietoja on kohdassaabout_Splatting.
Esimerkkejä
Esimerkki 1 – Kahden tekstitiedoston sisällön vertailu
Tässä esimerkissä vertaillaan kahden tekstitiedoston sisältöä. Esimerkissä käytetään seuraavia kahta tekstitiedostoa,joissa kukin arvo on erillisellä rivillä.
-
Testfile1.txt
sisältää arvot: koira, orava ja lintu. -
Testfile2.txt
sisältää arvot: kissa, lintu ja pesukarhu.
Tulosteessa näytetään vain ne rivit, jotka eroavat tiedostojen välillä. Testfile1.txt
on referenssiobjekti (<=
) ja Testfile2.txt
on eroobjekti (=>
). Rivejä, joiden sisältö esiintyy molemmissa tiedostoissa, ei näytetä.
Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject (Get-Content -Path C:\Test\Testfile2.txt)InputObject SideIndicator----------- -------------cat =>racoon =>dog <=squirrel <=
Esimerkki 2 – Vertaillaan jokaista sisältöriviä ja jätetään erot pois
Tässä esimerkissä käytetään ExcludeDifferent-parametria vertailemaan jokaista kahden tekstitiedoston sisältöriviä.
PowerShell 7.1:stä lähtien ExcludeDifferent-parametria käytettäessä IncludeEqual-parametri päätellään ja tuloste sisältää vain molempien tiedostojen sisältämät rivit, kuten SideIndicator(==
) osoittaa.
$objects = @{ ReferenceObject = (Get-Content -Path C:\Test\Testfile1.txt) DifferenceObject = (Get-Content -Path C:\Test\Testfile2.txt)}Compare-Object @objects -ExcludeDifferentInputObject SideIndicator----------- -------------bird ==
Esimerkki 3 – Näytä ero, kun käytetään PassThru -parametria
Normaalisti Compare-Object
palauttaa PSCustomObject-tyypin, jolla on seuraavat ominaisuudet:
- Tulo-objekti, jota verrataan
- SideIndicator-ominaisuus, joka osoittaa, kumpaan tulo-objektiin tulo kuuluu
Käytettäessä PassThru -parametria objektin tyyppi ei muutu, mutta palautetun objektin instanssiin on lisätty NoteProperty nimeltä SideIndicator. SideIndicatornäyttää, mihin tulo-objektiin tuloste kuuluu.
Seuraavissa esimerkeissä näytetään eri tulostyypit.
$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===
Käytettäessä PassThru -parametria palautetaan alkuperäinen objektin tyyppi (System.Boolean). Huomaa, kuinka System.Boolean -objektien oletusmuodon näyttämä tuloste ei näyttänytSideIndicator-ominaisuutta. Palautetussa System.Boolean-objektissa on kuitenkin lisättyNoteProperty.
Esimerkki 4 – Kahden yksinkertaisen objektin vertailu ominaisuuksien avulla
Tässä esimerkissä vertaillaan kahta erilaista merkkijonoa, joilla on sama pituus.
Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqualLength SideIndicator------ ------------- 3 ==
Esimerkki 5 – Monimutkaisten objektien vertailu ominaisuuksien avulla
Tässä esimerkissä näytetään käyttäytyminen monimutkaisien objektien vertailussa. Tässä esimerkissä tallennetaan kaksi erilaista prosessiobjektia PowerShellin eri instansseille. Molemmat muuttujat sisältävät samannimisiä prosessiobjekteja. Kun objekteja verrataan ilman Propertyparametrin määrittämistä, cmdlet pitää objekteja samanlaisina. Huomaa, ettäInputObjectin arvo on sama kuin ToString()-metodin tulos. KoskaSystem.Diagnostics.Process-luokassa ei ole IComparable-rajapintaa, cmdlet muuntaa objektit merkkijonoiksi ja vertaa sitten tuloksia.
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 <=
Kun määrität vertailtavat ominaisuudet, cmdlet näyttää erot.
Esimerkki 6 – Monimutkaisten IComparable-toteuttavien objektien vertailu
Jos objekti toteuttaa IComparable-toteutuksen, cmdlet etsii tapoja, joilla objekteja voidaan verrata.Josobjektit ovat erityyppisiä, Difference-objekti muunnetaanReferenceObject-tyypiksi ja sitä verrataan sitten.
Esimerkissä verrataan merkkijonoa TimeSpan-objektiin. Ensimmäisessä tapauksessa merkkijono muunnetaan TimeSpan-olioksi, joten objektit ovat samanarvoisia.
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 <=
Toisessa tapauksessa TimeSpan-olio muunnetaan merkkijonoksi, joten objektit ovat erilaisia.
Parameters
Merkitsee, että vertailun tulee olla isokirjaimet huomioiva.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Esimerkkiparametri | |
Hyväksyy putkiston syötteen: | False |
Accept wildcard characters: | False |
Määrittää vertailussa käytettävän kulttuurin.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Määrittää kohteet, joita verrataan viiteobjekteihin.
Tyyppi: | PSObject | |
Positio: | 1 | |
Esimerkkiliite: | Esimerkkiliite: | Ei yhtään |
Syöttöputken syöttö hyväksytty: | True | |
Accept wildcard characters: | False |
Merkitsee, että tämä cmdlet näyttää vain vertailtujen objektien samat ominaisuudet. Objektien väliset erot hylätään.
Käyttämällä ExcludeDifferent ja IncludeEqual voit näyttää vain ne rivit, jotka täsmäävät vertailu- ja eroobjektien välillä.
Jos ExcludeDifferent on määritetty ilman IncludeEqualia, tulostetta ei tule.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
IncludeEqual näyttää vertailu- ja erotusobjektien väliset vastaavuudet.
Oletusarvoisesti tuloste sisältää myös viite- ja eroobjektien väliset erot.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Kun käytät PassThru -parametria, Compare-Object
jättää PSCustomObject-kääreen pois verrattavien objektien ympäriltä ja palauttaa erilaiset objektit muuttumattomina.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Määrittää verrattavien referenssi- ja differenssiobjektien ominaisuuksien joukon.
Parametrin Property arvo voi olla uusi laskettu ominaisuus. Laskettu ominaisuusvoi olla skriptilohko tai hash-taulukko. Kelvollisia avain-arvopareja ovat:
- Expression –
<string>
tai<script block>
Lisätietoa on kohdassaabout_Calculated_Properties.
Tyyppi: | Object |
Position: | Named |
Default value: | None |
Esimerkintä: | |
Syötteen hyväksyminen putkesta: | False |
Accept wildcard characters: | False |
Määrittää vertailussa referenssinä käytettävien objektien joukon.
Tyyppi: | PSObject |
Tyyppi: | 0 |
Oletusarvo: | None |
Hyväksyy putkiston syötteen: | False |
Accept wildcard characters: | False |
Määrittää vierekkäisten objektien lukumäärän, jonka Compare-Object
tarkastaa etsiessään vastaavuutta objektien kokoelmassa. Compare-Object
tutkii vierekkäisiä objekteja, kun se ei löydä objektia samassa paikassa kokoelmassa. Oletusarvo on ::MaxValue
, mikä tarkoittaa, että Compare-Object
tutkii koko objektikokoelman.
Type: | Int32 | |
Position: | Named | |
Default value: | ::MaxValue | |
Esimerkkiputken syöttö: | False | |
Accept wildcard characters: | False |
Syötteet
PSObject
Voit lähettää objektin putkistoa pitkin DifferenceObject-parametrille.
Outputs
None
Jos referenssiobjekti ja difference-objekti ovat samat, tulostusta ei tule, ellet käytä IncludeEqual-parametria.
PSCustomObject
Jos objektit ovat erilaisia, Compare-Object
kääritään eroavat objektit PSCustomObject
wrapperiin, jossa on SideIndicator-ominaisuus, jolla viitataan eroavaisuuksiin.
Käytettäessä PassThru -parametria objektin Type ei muutu, mutta palautettavaan objektin instanssiin on lisätty NoteProperty-ominaisuus nimeltä SideIndicator. SideIndicatornäyttää, mihin tulo-objektiin tuloste kuuluu.
Notes
Käytettäessä PassThru -parametria konsolissa näytettävä tuloste ei välttämättä sisälläSideIndicator-ominaisuutta. Objektityypin tulostuksen oletusformaattinäkymä Compare-Object
ei sisällä SideIndicator-ominaisuutta. Lisätietoja on tämän artikkelin esimerkissä 3.
- tietoa_Calculated_Properties
- ForEach-Object
- Group-Object
- Measure-Object
- New-Object
- Select-Object
- Sort-Object
- Tee-Object
- Where-Object
- Get-Process