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ırsa, (==
) değerin her iki nesnede de olduğunu gösterir.
Başvuru veya fark nesneleri null ()$null
Compare-Object
ise, 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 olacak şekilde aşağıdaki iki metin dosyası kullanılır.
Testfile1.txt
şu 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ırma ve farklılıkları hariç tutma
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 parametresini kullanı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 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===
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 nesnesinin eklenen NoteProperty değeri vardır.
Örnek 4 - Özellikleri kullanarak iki basit nesneyi karşılaştırma
Bu örnekte, uzunluğu aynı olan iki farklı dizeyi karşılaştırıyoruz.
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'i 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, dize bir TimeSpan'a 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 , 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örüntülediğini gösterir. Nesneler arasındaki farklar atılır.
Yalnızca başvuru ve fark nesneleri arasında eşleşen çizgileri görüntülemek için IncludeEqual ile ExcludeDifferent kullanın.
ExcludeDifferentIncludeEqual olmadan belirtilirse çıkış olmaz.
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 çevresinde 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şvurunun 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 olan değeri, [Int32]::MaxValue
nesne koleksiyonunun tamamını incelediği Compare-Object
anlamına gelir.
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
Bir nesneyi işlem hattından DifferenceObject parametresine gönderebilirsiniz.
Çıkışlar
None
Başvuru nesnesi ve fark nesnesi aynıysa, IncludeEqual parametresini kullanmadığınız sürece çıkış yoktur.
Nesneler farklıysa, Compare-Object
farklara başvurmak için farklı nesneleri bir PSCustomObject
sarmalayıcıda SideIndicator özelliğiyle sarmalar.
PassThru parametresini kullandığınızda, nesnenin türü değiştirilmez, ancak döndürülen nesnenin örneğinde SideIndicator adlı bir NoteProperty eklenmiştir. SideIndicator , çıkışın hangi giriş nesnesine ait olduğunu gösterir.
Notlar
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.