Compare-Object

Moduł: Microsoft.PowerShell.Utility

Porównuje dwa zestawy obiektów.

Syntaktyka

Compare-Object <PSObject> <PSObject> >] 

Opis

Centdlet Compare-Object porównuje dwa zestawy obiektów. Jeden zestaw obiektów jest odniesieniem,a drugi zestaw obiektów jest różnicą.

Compare-Objectsprawdza dostępne metody porównywania całego obiektu. Jeśli nie może znaleźć odpowiedniej metody, wywołuje metody ToString() obiektów wejściowych i porównuje wyniki łańcuchów znaków. Możesz podać jedną lub więcej właściwości, które mają zostać użyte do porównania. Gdy podane są właściwości, cmdlet porównuje tylko wartości tych właściwości.

Wynik porównania wskazuje, czy wartość właściwości pojawiła się tylko w obiekcie odniesienia (<=) czy tylko w obiekcie różnicy (=>). Jeśli użyto parametru IncludeEqual, (==) wskazuje, że wartość znajduje się w obu obiektach.

Jeśli obiekt odniesienia lub obiekt różnicy mają wartość null ($null), Compare-Object generuje błąd zakończenia.

W niektórych przykładach zastosowano splatanie w celu zmniejszenia długości wierszy próbek kodu. Aby uzyskać więcej informacji, zobaczabout_Splatting.

Przykłady

Przykład 1 – Porównaj zawartość dwóch plików tekstowych

Ten przykład porównuje zawartość dwóch plików tekstowych. W przykładzie użyto następujących dwóch plików tekstowych, w których każda wartość znajduje się w osobnym wierszu.

  • Testfile1.txt zawiera wartości: pies, wiewiórka i ptak.
  • Testfile2.txt zawiera wartości: kot, ptak i szop.

Wyniki wyświetlają tylko te wiersze, które różnią się między plikami. Testfile1.txt jest obiektem referencji (<=), a Testfile2.txt jest obiektem różnicy (=>). Linie z treścią, które występują w obu plikach, nie są wyświetlane.

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

Przykład 2 – Porównaj każdą linię treści i wyklucz różnice

Ten przykład wykorzystuje parametr ExcludeDifferent do porównania każdej linii treści w dwóch plikach tekstowych.

Od wersji PowerShell 7.1, gdy używany jest parametr ExcludeDifferent, IncludeEqual jest wnioskowane i dane wyjściowe zawierają tylko linie zawarte w obu plikach, jak pokazuje wskaźnik SideIndicator(==).

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

Przykład 3 – Pokaż różnicę przy użyciu parametru PassThru

Normalnie, Compare-Object zwraca typ PSCustomObject z następującymi właściwościami:

  • Porównywany obiekt InputObject
  • Właściwość SideIndicator pokazująca, do którego obiektu wejściowego należy wyjście

Gdy użyjemy parametru PassThru, typ obiektu nie ulega zmianie, ale zwrócona instancja obiektu ma dodaną właściwość NoteProperty o nazwie SideIndicator. SideIndicator pokazuje, do którego obiektu wejściowego należy wyjście.

Następujące przykłady pokazują różne typy wyjścia.

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

Przy użyciu parametru PassThru zwracany jest oryginalny typ obiektu (System.Boolean). Zauważ, że wyjście wyświetlone przez domyślny format dla obiektów System.Boolean nie wyświetliło właściwościSideIndicator. Jednak zwrócony obiekt System.Boolean ma dodaną właściwośćNoteProperty.

Przykład 4 – Porównywanie dwóch prostych obiektów przy użyciu właściwości

W tym przykładzie porównujemy dwa różne łańcuchy znaków, które mają taką samą długość.

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

Przykład 5 – Porównywanie złożonych obiektów przy użyciu właściwości

Ten przykład pokazuje zachowanie podczas porównywania złożonych obiektów. W tym przykładzie przechowujemy dwa różne obiekty procesów dla różnych instancji PowerShell. Obie zmienne zawierają obiekty procesów o tej samej nazwie. Gdy obiekty są porównywane bez podania parametru Property, cmdlet uznaje, że obiekty są równe. Zauważ, że wartość obiektuInputObject jest taka sama jak wynik metody ToString(). Ponieważ klasaSystem.Diagnostics.Process nie posiada interfejsu IComparable, cmdlet konwertuje obiekty na ciągi znaków, a następnie porównuje wyniki.

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

Gdy określisz właściwości do porównania, cmdlet pokazuje różnice.

Przykład 6 – Porównywanie złożonych obiektów, które implementują IComparable

Jeśli obiekt implementuje IComparable, cmdlet szuka sposobów na porównanie obiektów.Jeśli obiekty są różnych typów, obiekt Difference jest konwertowany na typ obiektuReferenceObject, a następnie porównywany.

W tym przykładzie porównujemy ciąg znaków z obiektem TimeSpan. W pierwszym przypadku łańcuch jest konwertowany na TimeSpan, więc obiekty są równe.

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

W drugim przypadku TimeSpan jest konwertowany na łańcuch, więc obiekty są różne.

Parametry

-CaseSensitive

Wskazuje, że w porównaniach powinna być uwzględniana wielkość liter.

Typ: SwitchParameter
Pozycja: Nazwa
Wartość domyślna: False
Accept pipeline input: False
Accept wildcard characters: False

-Culture

Określa kulturę do użycia przy porównaniach.

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

Określa obiekty, które są porównywane z obiektami odniesienia.

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

Indicates that this cmdlet displays only the characteristics of compared objects that are equal. Różnice między obiektami są odrzucane.

Użyj polecenia ExcludeDifferent z funkcją IncludeEqual, aby wyświetlić tylko linie, które pasują do siebie między obiektami preferencji i różnicy.

Jeśli polecenie ExcludeDifferent jest określone bez funkcji IncludeEqual, nie ma danych wyjściowych.

Type: SwitchParameter
Position: Named
Wartość domyślna: False
Accept pipeline input: False
Akceptuj znaki wieloznaczne: False
-IncludeEqual

IncludeEqual wyświetla dopasowania między obiektami odniesienia i różnicy.

Domyślnie dane wyjściowe zawierają również różnice między obiektami odniesienia i różnic.

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

Kiedy używasz parametru PassThru, Compare-Object pomija wrapperaround PSCustomObject porównywanych obiektów i zwraca obiekty różniące się, niezmienione.

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

-Property

Przedstawia tablicę właściwości obiektów odniesienia i różnicy do porównania.

Wartością parametru Property może być nowa właściwość obliczana. Obliczana właściwość może być blokiem skryptu lub tablicą haszującą. Prawidłowe pary klucz-wartość to:

  • Wyrażenie – <string> lub <script block>

Więcej informacji można znaleźć w temacieabout_Calculated_Properties.

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

Określa tablicę obiektów używanych jako odniesienie do porównania.

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

Określa liczbę sąsiednich obiektów, które Compare-Object sprawdza podczas szukania dopasowania w kolekcji obiektów. Compare-Object bada sąsiednie obiekty, gdy nie znajduje obiektu w tej samej pozycji w kolekcji. Domyślną wartością jest ::MaxValue, co oznacza, żeCompare-Object bada całą kolekcję obiektów.

Type: Int32
Position: Named
Wartość domyślna: ::MaxValue
Accept pipeline input: False
Accept wildcard characters: False

Inputs

PSObject

Możesz wysłać obiekt w dół rurociągu do parametru DifferenceObject.

Outputs

None

Jeśli obiekt odniesienia i obiekt różnicy są takie same, nie ma wyjścia, chyba że użyjesz parametru IncludeEqual.

PSCustomObject

Jeśli obiekty są różne, Compare-Objectopakowuje różniące się obiekty w PSCustomObjectwrapper z właściwością SideIndicator, aby odnieść się do różnic.

Gdy używasz parametru PassThru, typ obiektu nie jest zmieniany, ale zwrócona instancja obiektu ma dodaną właściwość Note o nazwie SideIndicator. SideIndicator pokazuje, do którego obiektu wejściowego należy wyjście.

Notes

W przypadku użycia parametru PassThru, dane wyjściowe wyświetlane w konsoli mogą nie zawierać właściwościSideIndicator. Domyślny widok formatu dla typu obiektu wyprowadzanego przezCompare-Object nie zawiera właściwości SideIndicator. Więcej informacji można znaleźć w przykładzie 3 w tym artykule.

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.