在 PowerShell 中確定兩個物件是否相同
-
在 PowerShell 中使用
Compare-Object
Cmdlet 比較兩個字串 -
在 PowerShell 中使用
Compare-Object
Cmdlet 比較PSCustomObject
-
在 PowerShell 中使用
Compare-Object
Cmdlet 比較原始檔和目標檔案 -
在 PowerShell 中使用
Compare-Object
Cmdlet 比較檔案的屬性
有時,比較兩個物件並判斷它們是否相同可能具有挑戰性,但在 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 比較原始檔和目標檔案
在本教程中,我們建立了兩個資料夾,Folder1
和 Folder2
,在計算機的 C
驅動器中包含一些 .txt
檔案。
以下指令碼比較原始檔夾 Folder1
和目標資料夾 Folder2
中的檔案。
$sourcefiles = Get-ChildItem C:\Folder1
$destinationfiles = Get-ChildItem C:\Folder2
Compare-Object $sourcefiles $destinationfiles -IncludeEqual
Get-ChildItem
cmdlet 用於從資料夾 Folder1
和 Folder2
中獲取內容,它們分別儲存在兩個變數 $sourcefiles
和 $destinationfiles
中。
輸出:
InputObject SideIndicator
----------- -------------
Text3.txt ==
Text4.txt =>
Text1.txt <=
Text2.txt <=
上面的輸出顯示 Test3.txt
存在於兩個資料夾中。Test4.txt
僅存在於目標資料夾中,而 Test1.txt
和 Test2.txt
僅存在於原始檔夾中。
在 PowerShell 中使用 Compare-Object
Cmdlet 比較檔案的屬性
你還可以使用 Compare-Object
按 lastaccesstime
、lastwritetime
、length
等屬性比較檔案。-Property
引數用於指定要比較的物件的屬性。
以下命令使用 Compare-Object
按屬性 Name
和 Length
比較檔案。
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 檢查兩個物件是否相等。