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:比较每行内容并排除差异
此示例使用 IncludeEqual 和 ExcludeDifferent 参数来比较两个文本文件中每行内容。
由于该命令使用 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 仅显示相等的比较对象的特征。 放弃对象之间的差异。
将 ExcludeDifferent 与 IncludeEqual 配合使用,仅显示 引用 和 差异 对象之间的匹配行。
如果未 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 |
输入
可以将对象向下发送到 DifferenceObject 参数。
输出
None
如果 引用 对象和 差异 对象相同,则没有输出。
如果对象不同,Compare-Object
使用 SideIndicator 属性将不同对象包装在 PSCustomObject
包装器中以引用差异。 使用 PassThru 参数时,Compare-Object
省略比较对象周围的 PSCustomObject
包装器,并返回不同的对象,保持不变。