Compare-Object

İki nesne kümesini karşılaştırır.

Syntax

Compare-Object
       [-ReferenceObject] <PSObject[]>
       [-DifferenceObject] <PSObject[]>
       [-SyncWindow <Int32>]
       [-Property <Object[]>]
       [-ExcludeDifferent]
       [-IncludeEqual]
       [-PassThru]
       [-Culture <String>]
       [-CaseSensitive]
       [<CommonParameters>]

Description

cmdlet'i Compare-Object iki nesne kümesini karşılaştırır. Bir nesne kümesi başvuru, diğer nesne kümesi ise farktır.

Compare-Object bir nesnenin tamamını karşılaştırmak için kullanılabilir yöntemleri denetler. Uygun bir yöntem bulamazsa, giriş nesnelerinin ToString() yöntemlerini çağırır ve dize sonuçlarını karşılaştırır. Karşılaştırma için kullanılacak bir veya daha fazla özellik sağlayabilirsiniz. Özellikler sağlandığında, cmdlet yalnızca bu özelliklerin değerlerini karşılaştırır.

Karşılaştırmanın sonucu, bir özellik değerinin yalnızca başvuru nesnesinde mi () yoksa yalnızca fark nesnesinde mi<= (=>) göründüğünü gösterir. IncludeEqual parametresi kullanılıyorsa(== değerin her iki nesnede de olduğunu gösterir.

Başvuru veya fark nesneleri null ()$null ise, Compare-Object sonlandırıcı bir hata oluşturur.

Bazı örneklerde kod örneklerinin satır uzunluğunu azaltmak için sıçrama kullanılır. Daha fazla bilgi için bkz . about_Splatting.

Örnekler

Örnek 1 - İki metin dosyasının içeriğini karşılaştırma

Bu örnek, iki metin dosyasının içeriğini karşılaştırır. Örnekte, her değer ayrı bir satırda olmak üzere aşağıdaki iki metin dosyası kullanılır.

  • Testfile1.txt değerleri içerir: köpek, sincap ve kuş.
  • Testfile2.txt değerleri içerir: kedi, kuş ve racoon.

Çıkışta yalnızca dosyalar arasında farklı olan satırlar görüntülenir. Testfile1.txtbaşvuru nesnesidir (<=) ve Testfile2.txtfark nesnesidir (=>). her iki dosyada da görünen içeriğe sahip satırlar görüntülenmez.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject (Get-Content -Path C:\Test\Testfile2.txt)

InputObject SideIndicator
----------- -------------
cat         =>
racoon      =>
dog         <=
squirrel    <=

Örnek 2 - Her içerik satırını karşılaştırın ve farkları hariç tutun

Bu örnekte, iki metin dosyasındaki her içerik satırını karşılaştırmak için ExcludeDifferent parametresi kullanılır.

PowerShell 7.1 itibarıyla, ExcludeDifferent parametresi kullanılırken IncludeEqual çıkarılır ve çıkış yalnızca SideIndicator (== ) tarafından gösterildiği gibi her iki dosyada da bulunan satırları içerir.

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

InputObject SideIndicator
----------- -------------
bird        ==

Örnek 3 - PassThru parametresi kullanılırken farkı gösterme

Normalde, Compare-Object aşağıdaki özelliklere sahip bir PSCustomObject türü döndürür:

  • Karşılaştırılan InputObject
  • Çıkışın hangi giriş nesnesine ait olduğunu gösteren SideIndicator özelliği

PassThru parametresini kullandığınızda, nesnenin Türü değiştirilmez, ancak döndürülen nesnenin örneğinde SideIndicator adlı bir NoteProperty eklenir. SideIndicator , çıkışın hangi giriş nesnesine ait olduğunu gösterir.

Aşağıdaki örneklerde farklı çıkış türleri gösterilmektedir.

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

PassThru kullanılırken özgün nesne türü (System.Boolean) döndürülür. System.Boole nesneleri için varsayılan biçimde görüntülenen çıkışın SideIndicator özelliğini görüntülemediğini unutmayın. Ancak, döndürülen System.Boolean nesnesine NoteProperty eklendi.

Örnek 4 - Özellikleri kullanarak iki basit nesneyi karşılaştırma

Bu örnekte, uzunluğu aynı olan iki farklı dizeyi karşılaştıracağız.

Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqual

Length SideIndicator
------ -------------
     3 ==

Örnek 5 - Özellikleri kullanarak karmaşık nesneleri karşılaştırma

Bu örnek, karmaşık nesneleri karşılaştırırken oluşan davranışı gösterir. Bu örnekte, farklı PowerShell örnekleri için iki farklı işlem nesnesi depolayacağız. Her iki değişken de aynı ada sahip işlem nesneleri içerir. Nesneler Property parametresi belirtilmeden karşılaştırıldığında, cmdlet nesneleri eşit olarak kabul eder. InputObject değerinin ToString() yönteminin sonucuyla aynı olduğuna dikkat edin. System.Diagnostics.Process sınıfı IComparable arabirimine sahip olmadığından, cmdlet nesneleri dizelere dönüştürür ve ardından sonuçları karşılaştırır.

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

Karşılaştırılacak özellikleri belirttiğinizde, cmdlet farklılıkları gösterir.

Örnek 6 - IComparable uygulayan karmaşık nesneleri karşılaştırma

Nesne IComparable uygularsa, cmdlet nesneleri karşılaştırmanın yollarını arar. Nesneler farklı türlerdeyse, Difference nesnesi ReferenceObject türüne dönüştürülür ve karşılaştırılır.

Bu örnekte, bir dizeyi Bir TimeSpan nesnesiyle karşılaştırıyoruz. İlk durumda, nesneler eşit olması için dize bir TimeSpan'a dönüştürülür.

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

İkinci durumda TimeSpan, nesnenin farklı olması için bir dizeye dönüştürülür.

Parametreler

-CaseSensitive

Karşılaştırmaların büyük/küçük harfe duyarlı olması gerektiğini gösterir.

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

-Culture

Karşılaştırmalar için kullanılacak kültürü belirtir.

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

-DifferenceObject

Başvuru nesneleriyle karşılaştırılan nesneleri belirtir.

Type:PSObject[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ExcludeDifferent

Bu cmdlet'in yalnızca eşit olan karşılaştırılan nesnelerin özelliklerini gösterdiğini gösterir. Nesneler arasındaki farklar atılır.

Yalnızca başvuru ve fark nesneleri arasında eşleşen satırları görüntülemek için IncludeEqual ile ExcludeDifferent kullanın.

ExcludeDifferent IncludeEqual olmadan belirtilirse çıkış yoktur.

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

-IncludeEqual

IncludeEqual, başvuru ve fark nesneleri arasındaki eşleşmeleri görüntüler.

Varsayılan olarak, çıkış başvuru ve fark nesneleri arasındaki farkları da içerir.

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

-PassThru

PassThru parametresini kullandığınızda, Compare-Object karşılaştırılan nesnelerin etrafındaki PSCustomObject sarmalayıcısını atlar ve değişmeden farklı nesneleri döndürür.

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

-Property

Karşılaştırmak için başvuru ve fark nesnelerinin bir özellik dizisini belirtir.

Property parametresinin değeri yeni bir hesaplanmış özellik olabilir. Hesaplanan özellik bir betik bloğu veya karma tablo olabilir. Geçerli anahtar-değer çiftleri şunlardır:

  • İfade - <string> veya <script block>

Daha fazla bilgi için bkz . about_Calculated_Properties.

Type:Object[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ReferenceObject

Karşılaştırma için başvuru olarak kullanılan bir nesne dizisini belirtir.

Type:PSObject[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-SyncWindow

Bir nesne koleksiyonunda eşleşme ararken inceleyen Compare-Object bitişik nesnelerin sayısını belirtir. Compare-Object nesneyi bir koleksiyonda aynı konumda bulmadığında bitişik nesneleri inceler. Varsayılan değer, nesne koleksiyonunun tamamını inceleyen Compare-Object değeridir[Int32]::MaxValue.

Büyük koleksiyonlarla çalışırken, varsayılan değer verimli olmayabilir ancak doğrudur. SyncWindow için daha küçük bir değer belirtmek performansı artırabilir, ancak doğruluğu daha düşük olabilir.

Type:Int32
Position:Named
Default value:[Int32]::MaxValue
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Girişler

PSObject

İşlem hattının aşağısına DifferenceObject parametresine bir nesne gönderebilirsiniz.

Çıkışlar

None

Varsayılan olarak, ReferenceObject ve DifferenceObject aynı olduğunda bu cmdlet çıkış döndürmez.

PSCustomObject

Nesneler farklı olduğunda, bu cmdlet farklara başvurmak için farklı nesneleri bir PSCustomObject sarmalayıcısında SideIndicator özelliğiyle sarmalar.

IncludeEqual parametresini kullandığınızda ve nesneler aynı olduğunda, cmdlet sideIndicator özelliği olarak ayarlanmış ==bir PSCustomObjectiçinde sarmalanmış nesneleri döndürür.

PassThru parametresini kullandığınızda, nesnenin Türü değiştirilmez, ancak döndürülen nesnenin örneğinde SideIndicator adlı bir NoteProperty eklenir. SideIndicator , çıkışın hangi giriş nesnesine ait olduğunu gösterir.

Notlar

PowerShell için aşağıdaki diğer adları Compare-Objectiçerir:

  • Windows:
    • compare
    • diff

PassThru parametresi kullanılırken, konsolunda görüntülenen çıkış SideIndicator özelliğini içermeyebilir. tarafından nesne türü çıkışı Compare-Object için varsayılan biçim görünümü SideIndicator özelliğini içermez. Daha fazla bilgi için bu makaledeki Örnek 3'e bakın.