在 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 检查两个对象是否相等。