Compare-Object

Modul:

Syntaxe

Compare-Object <PSObject> <PSObject> >] 

Popis

Cemlet Compare-Object porovnává dvě sady objektů. Jedna sada objektů je referenční a druhá sada objektů je rozdílová.

Compare-Object kontroluje dostupné metody porovnávání celého objektu. Pokud nenajde vhodnou metodu, zavolá metody ToString() vstupních objektů a porovná řetězcovévýsledky. Můžete zadat jednu nebo více vlastností, které se mají pro porovnání použít. Pokud jsou vlastnosti zadány, rutina porovnává pouze hodnoty těchto vlastností.

Výsledek porovnání udává, zda se hodnota vlastnosti vyskytovala pouze v referenčním objektu (<=) nebo pouze v rozdílovém objektu (=>). Pokud je použit parametr IncludeEqual, (==) indikuje, že hodnota je v obou objektech.

Pokud jsou referenční nebo rozdílové objekty nulové ($null), Compare-Object vygeneruje chybu ukončení.

Některé příklady používají rozplývání, aby se zkrátila délka řádků ukázek kódu. Další informace naleznete v částio_Splatting.

Příklady

Příklad 1 – Porovnání obsahu dvou textových souborů

Tento příklad porovnává obsah dvou textových souborů. Příklad používá následující dva textové soubory,přičemž každá hodnota je na samostatném řádku.

  • Testfile1.txt obsahuje hodnoty: pes, veverka a pták.
  • Testfile2.txt obsahuje hodnoty: kočka, pták a mýval.

Výstup zobrazí pouze řádky, které se mezi soubory liší. Testfile1.txt je objekt reference (<=) a Testfile2.txt je objekt rozdílu (=>). Řádky s obsahem, které se vyskytují v obou souborech, se nezobrazí.

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

Příklad 2 – Porovnání každého řádku obsahu a vyloučení rozdílů

Tento příklad používá parametr ExcludeDifferent k porovnání každého řádku obsahu ve dvou textových souborech.

Od prostředí PowerShell 7.1 se při použití parametru ExcludeDifferent odvozuje IncludeEquala výstup obsahuje pouze řádky obsažené v obou souborech, jak ukazuje indikátor SideIndicator(==).

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

Příklad 3 – Zobrazení rozdílu při použití parametru PassThru

Normálně Compare-Object vrací typ PSCustomObject s následujícími vlastnostmi:

  • Porovnávaný vstupní objekt
  • Vlastnost SideIndicator, která ukazuje, ke kterému vstupnímu objektu výstup patří

Při použití parametru PassThru se typ objektu nezmění, ale instance vráceného objektu má přidanou vlastnost NoteProperty s názvem SideIndicator. SideIndicatorsukazuje, ke kterému vstupnímu objektu výstup patří.

Následující příklady ukazují různé typy výstupů.

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

Při použití parametru PassThru je vrácen původní typ objektu (System.Boolean). Všimněte si, ževýstup zobrazený výchozím formátem pro objekty System.Boolean nezobrazoval vlastnostSideIndicator. Vrácený objekt System.Boolean má však přidanou vlastnostNoteProperty.

Příklad 4 – Porovnání dvou jednoduchých objektů pomocí vlastností

V tomto příkladu porovnáváme dva různé řetězce, které mají stejnou délku.

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

Příklad 5 – Porovnání složených objektů pomocí vlastností

Tento příklad ukazuje chování při porovnávání složených objektů. V tomto příkladu ukládáme dva různé objekty procesu pro různé instance prostředí PowerShell. Obě proměnné obsahují objekty procesů se stejným názvem. Pokud jsou objekty porovnávány bez zadání parametru Property, rutina považuje objekty za stejné. Všimněte si, že hodnotaInputObject je stejná jako výsledek metody ToString(). Protože třídaSystem.Diagnostics.Process nemá rozhraní IComparable, rutina převede objekty na řetězce a pak porovná výsledky.

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

Pokud zadáte vlastnosti, které se mají porovnat, rutina zobrazí rozdíly.

Příklad 6 – Porovnávání složitých objektů, které implementují IComparable

Pokud objekt implementuje IComparable, rutina vyhledá způsoby porovnání objektů. pokud jsou objekty různých typů, objekt Difference je převeden na typReferenceObject a poté porovnán.

V tomto příkladu porovnáváme řetězec s objektem TimeSpan. V prvním případě je řetězeckonvertován na TimeSpan, takže objekty jsou si rovny.

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

V druhém případě je TimeSpan konvertován na řetězec, takže objekty jsou rozdílné.

Parametry

-CaseSensitive

Určuje, že porovnávání má být citlivé na velká a malá písmena.

Typ: PřepínačParametr
Pozice: Název
Výchozí hodnota: False
Přijímá vstup z potrubí: False
Accept wildcard characters: False
-Culture

Určuje kulturu, která se použije pro porovnání.

Typ: Řetězec
Pozice: Název
Výchozí hodnota: Jedna
Přijímá vstup z potrubí: False
Accept wildcard characters: False
-DifferenceObject

Určuje objekty, které jsou porovnávány s referenčními objekty.

Typ: PSObject
Pozice: 1
Výchozí hodnota: None
Přijímá vstup z potrubí: True
Accept wildcard characters: False
-ExcludeDifferent

Určuje, že tato rutina zobrazí pouze charakteristiky porovnávaných objektů, které jsou stejné. Rozdíly mezi objekty jsou vyřazeny.

Použije-li se příkaz ExcludeDifferent s příkazem IncludeEqual, zobrazí se pouze řádky, které se shodují mezi srovnávanými a rozdílnými objekty.

Pokud je příkaz ExcludeDifferent zadán bez příkazu IncludeEqual, nezobrazí se žádný výstup.

Typ: PřepínačParametr
Pozice: Název
Výchozí hodnota: False
Přijmout vstup z potrubí: False
Accept wildcard characters: False
-IncludeEqual

IncludeEqual zobrazuje shody mezi referenčními a rozdílovými objekty.

Ve výchozím nastavení obsahuje výstup také rozdíly mezi referenčními a rozdílovými objekty.

Typ: PřepínačParametr
Pozice: Název
Výchozí hodnota: False
Accept pipeline input: False
Accept wildcard characters: False
-PassThru

Při použití parametru PassThru Compare-Object vynechá obal PSCustomObject kolem porovnávaných objektů a vrátí odlišné objekty beze změny.

Typ: PřepínačParametr
Pozice: Název
Výchozí hodnota: False
Přijmout vstup z potrubí: False
Accept wildcard characters: False
-Property

Určuje pole vlastností referenčních a rozdílových objektů k porovnání.

Hodnotou parametru Property může být nová vypočtená vlastnost. Vypočtená vlastnostmůže být blok skriptu nebo hashovací tabulka. Platné dvojice klíč-hodnota jsou:

  • Výraz – <string> nebo <script block>

Další informace najdete v částio_vypočítaných_vlastnostech.

Typ: Objekt
Pozice: Název
Výchozí hodnota: Jedna
Přijímá vstup z potrubí: False
Accept wildcard characters: False
-ReferenceObject

Určuje pole objektů použitých jako reference pro porovnání.

Typ: PSObject
Pozice: 0
Výchozí hodnota: None
Přijímá vstup z potrubí: False
Accept wildcard characters: False
-SyncWindow

Určuje počet sousedních objektů, které Compare-Object kontroluje při hledání shody v kolekci objektů. Compare-Object zkoumá sousední objekty, když nenajde objektna stejné pozici v kolekci. Výchozí hodnota je ::MaxValue, což znamená, žeCompare-Object zkoumá celou kolekci objektů.

Typ: Int32
Pozice: Název
Výchozí hodnota: ::MaxValue
Přijímá vstup z potrubí: False
Accept wildcard characters: False

Inputs

PSObject

Do parametru DifferenceObject můžete poslat objekt po pipeline.

Výstupy

Žádný

Jsou-li referenční objekt a rozdílový objekt stejné, není žádný výstup, pokud nepoužijete parametr IncludeEqual.

PSCustomObject

Jsou-li objekty rozdílné, Compare-Objectobalí rozdílné objekty do PSCustomObjectobalu s vlastností SideIndicator, který odkazuje na rozdíly.

Při použití parametru PassThru se typ objektu nezmění, ale instance vráceného objektu má přidanou vlastnost NoteProperty s názvem SideIndicator. SideIndicatorsukazuje, ke kterému vstupnímu objektu výstup patří.

Notes

Při použití parametru PassThru nemusí výstup zobrazený v konzole obsahovat vlastnostSideIndicator. Výchozí zobrazení formátu pro výstup typu objektu pomocíCompare-Object neobsahuje vlastnost SideIndicator. Další informace naleznete vPříklad 3 v tomto článku.

  • o_vypočítaných_vlastnostech
  • Pro_každý_objekt
  • Skupina-Objekt
  • Měření-Objekt
  • Nový-Object
  • Select-Object
  • Sort-Object
  • Tee-Object
  • Where-Object
  • Get-Proces

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.