Compare-Object

比较两组对象。

语法

All

Compare-Object
    [-ReferenceObject] <PSObject[]>
    [-DifferenceObject] <PSObject[]>
    [-SyncWindow <Int32>]
    [-Property <Object[]>]
    [-ExcludeDifferent]
    [-IncludeEqual]
    [-PassThru]
    [-Culture <String>]
    [-CaseSensitive]
    [<CommonParameters>]

说明

Compare-Object cmdlet 比较两组对象。 一组对象是 引用,另一组对象是 差异

比较的结果指示属性值仅出现在 引用 对象(<=)中,还是仅出现在 差异 对象(=>)。 如果使用了 IncludeEqual 参数,则 (==) 指示值在这两个对象中。

如果 引用差异 对象为 null($null),Compare-Object 将生成终止错误。

一些示例使用旋转来减少代码示例的行长度。 有关详细信息,请参阅 about_Splatting。 此外,这些示例使用两个文本文件,每个文本文件都位于单独的行中。 Testfile1.txt 包含值:狗、松鼠和鸟。 Testfile2.txt 包含值:猫、鸟和龙。

示例

示例 1:比较两个文本文件的内容

此示例比较两个文本文件的内容。 输出仅显示文件之间的不同行。 引用 对象(),是 对象()的 差异。

不显示两个文件中显示的内容行。

Compare-Object -ReferenceObject $(Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject $(Get-Content -Path C:\Test\Testfile2.txt)
InputObject SideIndicator
----------- -------------
cat         =>
racoon      =>
dog         <=
squirrel    <=

示例 2:比较两个文本文件中每行内容

此示例使用 IncludeEqual 比较两个文本文件中每行内容。 将显示这两个文件中的所有内容行。

SideIndicator 指定行出现在 Testfile1.txt引用 对象(<=)、Testfile2.txt差异 对象(=>)或两个文件(==)。

$objects = @{
ReferenceObject = $(Get-Content -Path C:\Test\Testfile1.txt)
DifferenceObject = $(Get-Content -Path C:\Test\Testfile2.txt)
}
Compare-Object @objects -IncludeEqual
InputObject SideIndicator
----------- -------------
bird        ==
cat         =>
racoon      =>
dog         <=
squirrel    <=

示例 3:比较每行内容并排除差异

此示例使用 IncludeEqualExcludeDifferent 参数来比较两个文本文件中每行内容。

由于该命令使用 ExcludeDifferent 参数,因此输出仅包含这两个文件中包含的行,如 SideIndicator==所示)。

$objects = @{
ReferenceObject = $(Get-Content -Path C:\Test\Testfile1.txt)
DifferenceObject = $(Get-Content -Path C:\Test\Testfile2.txt)
}
Compare-Object @objects -IncludeEqual -ExcludeDifferent
InputObject SideIndicator
----------- -------------
bird        ==

示例 4:比较两组进程对象

此示例比较了包含计算机正在运行的进程的两组对象。

$Processes_Before = Get-Process
notepad.exe
$Processes_After = Get-Process
Compare-Object -ReferenceObject $Processes_Before -DifferenceObject $Processes_After
InputObject                            SideIndicator
-----------                            -------------
System.Diagnostics.Process (notepad)   =>

Get-Process cmdlet 获取计算机的正在运行的进程,并将其存储在 $Processes_Before 变量中。

启动 notepad.exe 应用程序。

Get-Process 获取计算机的正在运行的进程更新列表,并将其存储在 $Processes_After 变量中。

Compare-Object 比较存储在 $Processes_Before$Processes_After 变量中的两组进程对象。 输出显示 对象的差异($Processes_After)。

参数

-CaseSensitive

指示比较应区分大小写。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Culture

指定要用于比较的区域性。

参数属性

类型:String
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-DifferenceObject

指定与 引用 对象进行比较的对象。

参数属性

类型:

PSObject[]

默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:1
必需:True
来自管道的值:True
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ExcludeDifferent

指示此 cmdlet 仅显示相等的比较对象的特征。 放弃对象之间的差异。

ExcludeDifferentIncludeEqual 配合使用,仅显示 引用差异 对象之间的匹配行。

如果未 IncludeEqual指定 ExcludeDifferent,则没有输出。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-IncludeEqual

IncludeEqual 显示 引用差异 对象之间的匹配项。

默认情况下,输出还包括 引用差异 对象之间的差异。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-PassThru

使用 PassThru 参数时,Compare-Object 省略比较对象周围的 PSCustomObject 包装器,并返回不同对象不变。

参数属性

类型:SwitchParameter
默认值:False
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Property

指定要比较的 引用差异 对象的属性数组。

参数属性

类型:

Object[]

默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-ReferenceObject

指定用作比较引用的对象数组。

参数属性

类型:

PSObject[]

默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:0
必需:True
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-SyncWindow

指定在查找对象集合中的匹配项时 Compare-Object 检查的相邻对象的数量。 Compare-Object 在集合中找不到位于相同位置的对象时检查相邻对象。 默认值为 [Int32]::MaxValue,这意味着 Compare-Object 检查整个对象集合。

参数属性

类型:Int32
默认值:[Int32]::MaxValue
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

CommonParameters

此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters

输入

PSObject

可以将对象向下发送到 DifferenceObject 参数。

输出

None

如果 引用 对象和 差异 对象相同,则没有输出。

PSCustomObject

如果对象不同,Compare-Object 使用 PSCustomObject 属性将不同对象包装在 包装器中以引用差异。 使用 PassThru 参数时,Compare-Object 省略比较对象周围的 PSCustomObject 包装器,并返回不同的对象,保持不变。