Compare-Object
İki nesne kümesini karşılaştırır.
Sözdizimi
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.txt
başvuru nesnesidir (<=
) ve Testfile2.txt
fark 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.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-Culture
Karşılaştırmalar için kullanılacak kültürü belirtir.
Tür: | String |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-DifferenceObject
Başvuru nesneleriyle karşılaştırılan nesneleri belirtir.
Tür: | PSObject[] |
Position: | 1 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | True |
Joker karakterleri kabul et: | 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.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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.
Tür: | Object[] |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-ReferenceObject
Karşılaştırma için başvuru olarak kullanılan bir nesne dizisini belirtir.
Tür: | PSObject[] |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | 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.
Tür: | Int32 |
Position: | Named |
Default value: | [Int32]::MaxValue |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
Girişler
İş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.
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 PSCustomObject iç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-Object
iç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.
İlişkili Bağlantılar
PowerShell