在 PowerShell 中確定兩個物件是否相同

Rohan Timalsina 2023年1月30日 2022年6月7日
  1. 在 PowerShell 中使用 Compare-Object Cmdlet 比較兩個字串
  2. 在 PowerShell 中使用 Compare-Object Cmdlet 比較 PSCustomObject
  3. 在 PowerShell 中使用 Compare-Object Cmdlet 比較原始檔和目標檔案
  4. 在 PowerShell 中使用 Compare-Object Cmdlet 比較檔案的屬性
在 PowerShell 中確定兩個物件是否相同

有時,比較兩個物件並判斷它們是否相同可能具有挑戰性,但在 PowerShell 的幫助下可以輕鬆完成。物件可以是各種型別,例如字串、檔案、檔案或變數內容、程序等。

你可以使用 Compare-Object cmdlet 在 PowerShell 中比較兩組物件。本教程將幫助你比較兩個物件並使用 PowerShell 確定它們是否相同。

在 PowerShell 中使用 Compare-Object Cmdlet 比較兩個字串

你可以使用 Compare-Object 來確定兩個字串之間的差異。

在開始之前,讓我們瞭解 Compare-Object cmdlet 用於顯示兩個物件之間差異的側面指示器。

Side Indicators      Meaning
==                   It indicates both the source and destination objects are equal or contain the same values.
=>                   It indicates that the destination object is different or the content only exists on the destination object.
<=                   It indicates that the source object is different or the content only exists on the source object.

以下命令是比較兩個不同字串的示例。

Compare-Object "Apple" "Mango"

輸出:

InputObject SideIndicator
----------- -------------
Mango       =>
Apple       <=

上面的輸出表明兩個字串是不同的。字串 Mango 顯示右側指示符,表示它與源物件不同,字串 Apple 顯示左側指示符,表示它與目標物件不同。

但是如果兩個字串相等,則該命令不會顯示任何輸出,除非與 -IncludeEqual 引數一起使用。它顯示相等字串的 == 指示符。

以下命令比較兩個相似的字串。

Compare-Object "Apple" "apple" -IncludeEqual

輸出:

InputObject SideIndicator
----------- -------------
Apple       ==

上面的示例不區分大小寫,因為它顯示相同的指示符,儘管它們有不同的字母大小寫。你將需要使用 -CaseSensitive 引數來比較區分大小寫的字串。

Compare-Object "Apple" "apple" -CaseSensitive

輸出:

InputObject SideIndicator
----------- -------------
apple       =>
Apple       <=

如你所見,這一次顯示了兩個字串的差異。

在 PowerShell 中使用 Compare-Object Cmdlet 比較 PSCustomObject

你還可以使用 Compare-Object 在 PowerShell 中比較 PSCustomObject

下面的例子演示了使用 Compare-Object 比較兩個 PSCustomObject$obj1$obj2

$obj1 = [PSCustomObject]@{ a = 10; b = 20}
$obj2 = [PSCustomObject]@{ a = 10; b = 20}
function Test-Object {
    param(
        [Parameter(Mandatory = $true)]
        $obj1,
        [Parameter(Mandatory = $false)]
        $obj2
    )

    return !(Compare-Object $obj1.PSObject.Properties $obj2.PSObject.Properties)
}
Test-Object $obj1 $obj2

輸出:

True

它返回 True,這意味著兩個物件具有相同的值並且是相同的。

在 PowerShell 中使用 Compare-Object Cmdlet 比較原始檔和目標檔案

在本教程中,我們建立了兩個資料夾,Folder1Folder2,在計算機的 C 驅動器中包含一些 .txt 檔案。

以下指令碼比較原始檔夾 Folder1 和目標資料夾 Folder2 中的檔案。

$sourcefiles = Get-ChildItem C:\Folder1
$destinationfiles = Get-ChildItem C:\Folder2
Compare-Object $sourcefiles $destinationfiles -IncludeEqual

Get-ChildItem cmdlet 用於從資料夾 Folder1Folder2 中獲取內容,它們分別儲存在兩個變數 $sourcefiles$destinationfiles 中。

輸出:

InputObject SideIndicator
----------- -------------
Text3.txt   ==
Text4.txt   =>
Text1.txt   <=
Text2.txt   <=

上面的輸出顯示 Test3.txt 存在於兩個資料夾中。Test4.txt 僅存在於目標資料夾中,而 Test1.txtTest2.txt 僅存在於原始檔夾中。

在 PowerShell 中使用 Compare-Object Cmdlet 比較檔案的屬性

你還可以使用 Compare-Objectlastaccesstimelastwritetimelength 等屬性比較檔案。-Property 引數用於指定要比較的物件的屬性。

以下命令使用 Compare-Object 按屬性 NameLength 比較檔案。

Compare-Object $sourcefiles $destinationfiles -Property Name, Length -IncludeEqual

輸出:

Name      Length SideIndicator
----      ------ -------------
Test3.txt      5 ==
Test4.txt     12 =>
Test1.txt     12 <=
Test2.txt      8 <=

Compare-Object 是比較兩個物件的簡單而有用的命令。我們希望本教程讓你瞭解如何使用 PowerShell 檢查兩個物件是否相等。

Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相關文章 - PowerShell Object