Compare-Object
Membandingkan dua set objek.
Sintaks
Default (Default)
Compare-Object
[-ReferenceObject] <PSObject[]>
[-DifferenceObject] <PSObject[]>
[-SyncWindow <Int32>]
[-Property <Object[]>]
[-ExcludeDifferent]
[-IncludeEqual]
[-PassThru]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Deskripsi
Cmdlet Compare-Object membandingkan dua set objek. Satu set objek adalah referensi , dan kumpulan objek lainnya adalah perbedaan .
Compare-Object memeriksa metode yang tersedia untuk membandingkan seluruh objek. Jika tidak dapat menemukan metode yang sesuai, metode ini memanggil metode ToString() objek input dan membandingkan hasil string. Anda dapat menyediakan satu atau beberapa properti yang akan digunakan untuk perbandingan. Ketika properti disediakan, cmdlet membandingkan nilai properti tersebut saja.
Hasil perbandingan menunjukkan apakah nilai properti hanya muncul di objek referensi ==) menunjukkan nilainya ada di kedua objek.
Jika referensi atau perbedaan objek null ($null), Compare-Object menghasilkan kesalahan penghentian.
Beberapa contoh menggunakan splatting untuk mengurangi panjang baris sampel kode. Untuk lebih banyak informasi, lihat about_Splatting.
Contoh
Contoh 1 - Bandingkan konten dua file teks
Contoh ini membandingkan konten dua file teks. Contohnya menggunakan dua file teks berikut, dengan setiap nilai pada baris terpisah.
-
Testfile1.txtberisi nilai-nilai: anjing, tupai, dan burung. -
Testfile2.txtberisi nilai-nilai: kucing, burung, dan racoon.
Output hanya menampilkan baris yang berbeda di antara file. Baris dengan konten yang muncul di kedua file tidak ditampilkan.
$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 <=
Untuk contoh ini, output menunjukkan informasi berikut
-
catdanracoonditemukan dalam file objek perbedaan, tetapi hilang dari file objek referensi -
dogdansquirrelditemukan dalam file objek referensi, tetapi hilang dari file objek perbedaan
Contoh 2 - Membandingkan setiap baris konten dan mengecualikan perbedaan
Contoh ini menggunakan parameter ExcludeDifferent untuk membandingkan setiap baris konten dalam dua file teks.
Pada PowerShell 7.1, saat menggunakan parameter ExcludeDifferent, IncludeEqual disimpulkan dan output hanya berisi baris yang terkandung dalam kedua file, seperti yang ditunjukkan oleh SideIndicator (==).
$objects = @{
ReferenceObject = (Get-Content -Path C:\Test\Testfile1.txt)
DifferenceObject = (Get-Content -Path C:\Test\Testfile2.txt)
}
Compare-Object @objects -ExcludeDifferent
InputObject SideIndicator
----------- -------------
bird ==
Contoh 3 - Tampilkan perbedaan saat menggunakan parameter PassThru
Biasanya, Compare-Object mengembalikan jenis PSCustomObject dengan properti berikut:
- InputObject dibandingkan
- Properti SideIndicator yang menunjukkan objek input mana yang dimiliki output
Saat Anda menggunakan parameter PassThru, Jenis objek tidak diubah tetapi instans objek yang dikembalikan memiliki NoteProperty tambahan bernama SideIndicator. SideIndicator menunjukkan objek input mana tempat output berada.
Contoh berikut menunjukkan berbagai jenis output.
$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===
Saat menggunakan PassThru, jenis objek asli (System.Boolean) dikembalikan. Perhatikan bagaimana output yang ditampilkan dengan format default untuk objek System.Boolean tidak menampilkan properti SideIndicator. Namun, objek System.Boolean yang dikembalikan memiliki NotePropertyyang ditambahkan.
Contoh 4 - Membandingkan dua objek sederhana menggunakan properti
Dalam contoh ini, kita membandingkan dua string berbeda yang memiliki panjang yang sama.
$objects = @{
ReferenceObject = 'abc'
DifferenceObject = 'xyz'
Property = 'Length'
}
Compare-Object @objects -IncludeEqual
Length SideIndicator
------ -------------
3 ==
Contoh 5 - Membandingkan objek kompleks menggunakan properti
Contoh ini menunjukkan perilaku saat membandingkan objek kompleks. Dalam contoh ini, kami menyimpan dua objek proses yang berbeda untuk instans PowerShell yang berbeda. Kedua variabel berisi objek proses dengan nama yang sama. Ketika objek dibandingkan tanpa menentukan parameter Properti, cmdlet menganggap objek sama. Perhatikan bahwa nilai InputObject sama dengan hasil metode ToString(). Karena kelas System.Diagnostics.Process tidak memiliki antarmuka IComparable, cmdlet mengonversi objek menjadi string kemudian membandingkan hasilnya.
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 <=
Saat Anda menentukan properti yang akan dibandingkan, cmdlet menunjukkan perbedaannya.
Contoh 6 - Membandingkan objek kompleks yang mengimplementasikan IComparable
Jika objek mengimplementasikan IComparable, cmdlet mencari cara untuk membandingkan objek. Jika objek adalah jenis yang berbeda, objek Perbedaan dikonversi ke jenis ReferenceObject kemudian dibandingkan.
Dalam contoh ini, kita membandingkan string dengan objek TimeSpan. Dalam kasus pertama, string dikonversi ke timeSpan sehingga objek sama.
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 <=
Dalam kasus kedua, TimeSpan dikonversi ke string sehingga objek berbeda.
Parameter
-CaseSensitive
Menunjukkan bahwa perbandingan harus peka huruf besar/kecil.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | False |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Culture
Menentukan budaya yang akan digunakan untuk perbandingan.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-DifferenceObject
Menentukan objek yang dibandingkan dengan referensi objek.
Properti parameter
| Jenis: | PSObject[] |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | 1 |
| Wajib: | True |
| Nilai dari alur: | True |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-ExcludeDifferent
Menunjukkan bahwa cmdlet ini hanya menampilkan karakteristik objek yang dibandingkan yang sama. Perbedaan antara objek dibuang.
Gunakan
Jika ExcludeDifferent ditentukan tanpa IncludeEqual, tidak ada output.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | False |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-IncludeEqual
Secara default, output juga mencakup perbedaan antara referensi dan perbedaan objek.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | False |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-PassThru
Saat Anda menggunakan parameter PassThru
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | False |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Property
Menentukan array properti referensi
Nilai parameter Properti
- Ekspresi -
<string>atau<script block>
Untuk informasi lebih lanjut, lihat tentang_Properti_Terhitung.
Properti parameter
| Jenis: | Object[] |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-ReferenceObject
Menentukan array objek yang digunakan sebagai referensi untuk perbandingan.
Properti parameter
| Jenis: | PSObject[] |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | 0 |
| Wajib: | True |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-SyncWindow
Menentukan jumlah objek yang berdekatan yang Compare-Object periksa saat mencari kecocokan dalam kumpulan objek.
Compare-Object memeriksa objek yang berdekatan ketika tidak menemukan objek dalam posisi yang sama dalam koleksi. Nilai default adalah [int32]::MaxValue, yang berarti bahwa Compare-Object memeriksa seluruh koleksi objek.
Saat bekerja dengan koleksi besar, nilai default mungkin tidak efisien tetapi akurat. Menentukan nilai yang lebih kecil untuk SyncWindow dapat meningkatkan performa tetapi dapat memiliki akurasi yang lebih rendah.
Properti parameter
| Jenis: | Int32 |
| Nilai default: | [int32]::MaxValue |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
CommonParameters
Cmdlet ini mendukung parameter umum: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, dan -WarningVariable. Untuk informasi selengkapnya, lihat about_CommonParameters.
Input
PSObject
Anda dapat mengirim objek ke alur ke parameter
Output
None
Secara default, cmdlet ini tidak mengembalikan output saat ReferenceObject dan DifferenceObject sama.
PSCustomObject
Ketika objek berbeda, cmdlet ini membungkus objek yang berbeda dalam pembungkus PSCustomObject dengan properti SideIndicator untuk mereferensikan perbedaan.
Saat Anda menggunakan parameter IncludeEqual dan objeknya sama, cmdlet mengembalikan objek yang dibungkus dalam PSCustomObject dengan properti SideIndicator diatur ke ==.
Saat Anda menggunakan parameter PassThru, Jenis objek tidak diubah tetapi instans objek yang dikembalikan memiliki NoteProperty tambahan bernama SideIndicator. SideIndicator menunjukkan objek input mana tempat output berada.
Catatan
PowerShell menyertakan alias berikut untuk Compare-Object:
- Windows:
comparediff
Saat menggunakan parameter PassThru, output yang ditampilkan di konsol mungkin tidak menyertakan properti SideIndicator. Tampilan format default untuk output jenis objek menurut Compare-Object tidak menyertakan properti SideIndicator. Untuk informasi selengkapnya, lihat Contoh 3 dalam artikel ini.