Compare-Object

Module: Microsoft.PowerShell.Utility

Vertailee kahta objektijoukkoa.

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

-CaseSensitive

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

Määrittää vertailussa käytettävän kulttuurin.

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

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

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

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

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

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

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

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-Objectkääritään eroavat objektit PSCustomObjectwrapperiin, 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

Vastaa

Sähköpostiosoitettasi ei julkaista.