Compare-Object

比较两组对象。

语法

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 对象的差异(notepad.exe)。

参数

-CaseSensitive

指示比较应区分大小写。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Culture

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

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-DifferenceObject

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

类型:PSObject[]
Position:1
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-ExcludeDifferent

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

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

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

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-IncludeEqual

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

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

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-PassThru

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

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Property

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

类型:Object[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ReferenceObject

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

类型:PSObject[]
Position:0
默认值:None
必需:True
接受管道输入:False
接受通配符:False

-SyncWindow

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

类型:Int32
Position:Named
默认值:[Int32]::MaxValue
必需:False
接受管道输入:False
接受通配符:False

输入

PSObject

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

输出

None

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

PSCustomObject

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