Compare-Object
Membandingkan dua set objek.
Sintaks
Compare-Object
[-ReferenceObject] <PSObject[]>
[-DifferenceObject] <PSObject[]>
[-SyncWindow <Int32>]
[-Property <Object[]>]
[-ExcludeDifferent]
[-IncludeEqual]
[-PassThru]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Deskripsi
Compare-Object
Cmdlet membandingkan dua set objek. Satu set objek adalah referensi, dan sekumpulan objek lainnya adalah perbedaannya.
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 (<=
) atau hanya di objek perbedaan (=>
). Jika parameter IncludeEqual digunakan, (==
) menunjukkan nilai berada di kedua objek.
Jika referensi atau objek perbedaan null ($null
), Compare-Object
menghasilkan kesalahan penghentian.
Beberapa contoh menggunakan splatting untuk mengurangi panjang baris sampel kode. Untuk informasi selengkapnya, 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.txt
berisi nilai: anjing, tupai, dan burung.Testfile2.txt
berisi nilai-nilai: kucing, burung, dan racoon.
Output hanya menampilkan baris yang berbeda di antara file. Testfile1.txt
adalah objek referensi (<=
) dan Testfile2.txt
merupakan objek perbedaan (=>
). Baris dengan konten yang muncul di kedua file tidak ditampilkan.
Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject (Get-Content -Path C:\Test\Testfile2.txt)
InputObject SideIndicator
----------- -------------
cat =>
racoon =>
dog <=
squirrel <=
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 sedang 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 NoteProperty yang ditambahkan.
Contoh 4 - Membandingkan dua objek sederhana menggunakan properti
Dalam contoh ini, kita membandingkan dua string berbeda yang memiliki panjang yang sama.
Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -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 lalu 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 lalu 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.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Menentukan budaya yang akan digunakan untuk perbandingan.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DifferenceObject
Menentukan objek yang dibandingkan dengan objek referensi .
Type: | PSObject[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-ExcludeDifferent
Menunjukkan bahwa cmdlet ini hanya menampilkan karakteristik objek yang dibandingkan yang sama. Perbedaan antara objek dibuang.
Gunakan ExcludeDifferent dengan IncludeEqual untuk menampilkan hanya baris yang cocok antara objek referensi dan perbedaan .
Jika ExcludeDifferent ditentukan tanpa IncludeEqual, tidak ada output.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeEqual
IncludeEqual menampilkan kecocokan antara referensi dan objek perbedaan .
Secara default, output juga mencakup perbedaan antara referensi dan objek perbedaan .
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Saat Anda menggunakan parameter PassThru , Compare-Object
menghilangkan pembungkus PSCustomObject di sekitar objek yang dibandingkan dan mengembalikan objek yang berbeda, tidak berubah.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Menentukan array properti referensi dan objek perbedaan untuk dibandingkan.
Nilai parameter Properti dapat menjadi properti terhitung baru. Properti terhitung dapat berupa blok skrip atau tabel hash. Pasangan kunci-nilai yang valid adalah:
- Ekspresi -
<string>
atau<script block>
Untuk informasi selengkapnya, lihat about_Calculated_Properties.
Type: | Object[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReferenceObject
Menentukan array objek yang digunakan sebagai referensi untuk perbandingan.
Type: | PSObject[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SyncWindow
Menentukan jumlah objek yang berdekatan yang Compare-Object
memeriksa saat mencari kecocokan dalam kumpulan objek. Compare-Object
memeriksa objek yang berdekatan ketika tidak menemukan objek dalam posisi yang sama dalam koleksi. Nilai defaultnya adalah [Int32]::MaxValue
, yang berarti memeriksa Compare-Object
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.
Type: | Int32 |
Position: | Named |
Default value: | [Int32]::MaxValue |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
Anda dapat mengirim objek ke bawah alur ke parameter DifferenceObject .
Output
None
Secara default, cmdlet ini tidak mengembalikan output saat ReferenceObject dan DifferenceObject sama.
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:
compare
diff
Saat menggunakan parameter PassThru , output yang ditampilkan di konsol mungkin tidak menyertakan properti SideIndicator . Tampilan format default untuk output jenis objek dengan Compare-Object
tidak menyertakan properti SideIndicator . Untuk informasi selengkapnya lihat Contoh 3 di artikel ini.
Link Terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk