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,
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.txtdeğerleri içerir: köpek, sincap ve kuş. -
Testfile2.txtdeğ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
-
catveracoonfark nesnesi dosyasında bulunur, ancak başvuru nesnesi dosyasında eksiktir -
dogvesquirrelbaş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
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
Varsayılan olarak çıkış,
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
Ö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:
comparediff
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.