Aracılığıyla paylaş


Compare-Object

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

Sözdizimi

Default EnterprisePublishing

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

Description

Compare-Object cmdlet'i iki nesne kümesini karşılaştırır. Bir nesne kümesi,başvurusudur ve diğer nesne kümesifarkıdı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ırsa (==), 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. her iki dosyada da görünen içeriğe sahip satırlar görüntülenmez.

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

Bu örnekte, çıktı aşağıdaki bilgileri gösterir

  • cat ve racoon fark nesnesi dosyasında bulunur, ancak başvuru nesnesi dosyasında eksiktir
  • dog ve squirrel başvuru nesnesi dosyasında bulunur, ancak fark nesne dosyasında eksiktir

Ö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 ait olduğu giriş nesnesini gösteren SideIndicator özelliği

PassThru parametresini kullandığınızda, nesnenin Tür değiştirilmez, ancak döndürülen nesnenin örneğinde SideIndicatoradlı bir NoteProperty eklenmiştir. 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===

PassThrukullanılırken özgün nesne türü (System.Boolean) döndürülür. System.Boolean 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 nesnesi, NotePropertyeklendi.

Ö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.

$objects = @{
  ReferenceObject = 'abc'
  DifferenceObject = 'xyz'
  Property = 'Length'
}
Compare-Object @objects -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 Özelliği parametresi belirtilmeden karşılaştırıldığında, cmdlet nesneleri eşit 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 IComparableuygularsa, cmdlet nesneleri karşılaştırmanın yollarını arar. Nesneler farklı türlerse, Fark nesnesi ReferenceObject türüne dönüştürülür karşılaştırılır.

Bu örnekte, bir dizeyi bir TimeSpan nesnesiyle karşılaştırıyoruz. İlk durumda, dize bir TimeSpan dönüştürülür, böylece nesneler eşit olur.

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 bir dizeye dönüştürülür, böylece nesne farklı olur.

Parametreler

-CaseSensitive

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

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-Culture

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

Parametre özellikleri

Tür:String
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-DifferenceObject

başvuru nesnelerle karşılaştırılan nesneleri belirtir.

Parametre özellikleri

Tür:

PSObject[]

Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:1
Zorunlu:True
İşlem hattından gelen değer:True
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer: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 nesneleri arasındaki farkları görüntülemek için IncludeEqual ile ExcludeDifferent kullanın.

ExcludeDifferentIncludeEqualolmadan belirtilirse, çıkış yoktur.

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-IncludeEqual

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

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

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-PassThru

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

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-Property

başvuru özellikleri dizisini ve karşılaştıracak nesneleri farkı belirtir.

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

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

Daha fazla bilgi için, about_Calculated_Propertiesbölümüne bakın.

Parametre özellikleri

Tür:

Object[]

Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-ReferenceObject

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

Parametre özellikleri

Tür:

PSObject[]

Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:0
Zorunlu:True
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

-SyncWindow

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

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.

Parametre özellikleri

Tür:Int32
Default value:[int32]::MaxValue
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

CommonParameters

Bu cmdlet yaygın parametreleri destekler: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ve -WarningVariable. Daha fazla bilgi için bkz. about_CommonParameters.

Girişler

PSObject

bir nesneyi işlem hattından DifferenceObject parametresine 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 == sarmalanan nesneleri döndürür.

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

Notlar

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

  • Windows:
    • compare
    • diff

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