在 PowerShell 中确定两个对象是否相同

Rohan Timalsina 2023年1月30日
  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
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