如何在PowerShell中使用Compare-Object?
PowerShell中的Compare-Object命令用于比较两个对象。对象可以是可变内容,两个文件,字符串等。此cmdlet使用很少的语法来显示对象之间的差异,这称为旁指示符。
=> - Difference in destination object. <= - Difference in reference (source) object. == - When the source and destination objects are equal.
例1:比较两个字符串。
PS C:\> Compare-Object "World" "Alpha" InputObject SideIndicator ----------- ------------- Alpha => World <=
在上面的示例中,Alpha字符串显示右指示器表示它与源对象的区别,而World字符串显示左指示器表示它与目标对象的区别。
例2:比较两个相等的字符串。
以下示例将不会显示任何输出,因为源和目标参考对象是相同的,但是当您使用-IncludeEqual参数时,它将显示匹配对象的等号(==)
PS C:\> Compare-Object "World" "woRld" PS C:\> Compare-Object "World" "woRld" -IncludeEqual InputObject SideIndicator ----------- ------------- World ==
请注意,比较对象不区分大小写。对于区分大小写的比较,请使用-CaseSensitive参数。
PS C:\> Compare-Object "World" "woRld" -CaseSensitive InputObject SideIndicator ----------- ------------- woRld => World <=
例3:源文件和目标文件的比较。
$sourcefiles = Get-ChildItem C:\Test1 -Recurse $destfiles = Get-ChildItem C:\Test2\ -Recurse Compare-Object $sourcefiles $destfiles -IncludeEqual
输出结果
InputObject SideIndicator ----------- ------------- File1.txt == File3.txt => File2.txt <=
上面的示例显示file1.txt在两个位置都存在,而File3.txt在目标位置而不是源位置,而File2.txt在源位置而不是目标位置。
如果我们用-ExcludeDifference-参数,输出不会,除非我们添加显示IncludeEqual参数。
Compare-Object $sourcefiles $destfiles -ExcludeDifferent
以下命令将仅显示匹配的文件。
PS C:\> Compare-Object $sourcefiles $destfiles -IncludeEqual -ExcludeDifferent InputObject SideIndicator ----------- ------------- File1.txt ==
示例4:与属性名称的比较。
要比较具有特定属性名称的两个对象,请使用-Property参数。在下面的示例中,我们将比较文件LastWriteTime。
示例
$sfiles = Get-ChildItem C:\Test1\ -Recurse $dfiles = Get-ChildItem C:\Test2\ -Recurse Compare-Object $sfiles $dfiles -Property LastWriteTime -IncludeEqual
输出结果
LastWriteTime SideIndicator ------------- ------------- 8/28/2020 7:27:11 AM == 8/28/2020 7:29:00 AM => 8/28/2020 7:49:37 AM <=
如果在输出中需要任何特定属性的名称,请先添加该属性,然后添加要比较的属性名称。例如,
示例
Compare-Object $sfiles $dfiles -Property Name, LastWriteTime -IncludeEqual
输出结果
Name LastWriteTime SideIndicator ---- ------------- ------------- File1.txt 8/28/2020 7:27:11 AM == File3.txt 8/28/2020 7:29:00 AM => File2.txt 8/28/2020 7:49:37 AM <=