在PowerShell中,可以使用Compare-Object
cmdlet来比较包含对象的两个列表。以下是一个示例代码:
# 创建两个包含对象的列表
$list1 = @(
[PSCustomObject]@{ Name = 'John'; Age = 25 },
[PSCustomObject]@{ Name = 'Alice'; Age = 30 },
[PSCustomObject]@{ Name = 'Bob'; Age = 35 }
)
$list2 = @(
[PSCustomObject]@{ Name = 'John'; Age = 25 },
[PSCustomObject]@{ Name = 'Mary'; Age = 40 },
[PSCustomObject]@{ Name = 'Bob'; Age = 35 }
)
# 使用Compare-Object比较两个列表
$result = Compare-Object -ReferenceObject $list1 -DifferenceObject $list2 -Property Name,Age
# 输出比较结果
$result | ForEach-Object {
$reference = $_.ReferenceObject
$difference = $_.DifferenceObject
if ($reference -eq $null) {
Write-Host "$($difference.Name)($($difference.Age)) 只在列表2中"
}
elseif ($difference -eq $null) {
Write-Host "$($reference.Name)($($reference.Age)) 只在列表1中"
}
else {
Write-Host "共有对象: $($reference.Name)($($reference.Age))"
}
}
上述代码比较了$list1
和$list2
两个列表,并输出比较结果。其中,Compare-Object
cmdlet将两个列表进行比较,并返回一个包含差异的DifferenceObject
和ReferenceObject
的结果集。在输出比较结果时,通过判断ReferenceObject
和DifferenceObject
是否为$null
,可以确定对象在哪个列表中存在或不存在。