我正在尝试在带有Name属性的排序对象数组中查找重复项。我有以下代码:
for (($i -eq 1), ($i -lt $arr.Length), ($i++))
{
if($arr[$i] -eq $arr[$i-1])
{
write-host "Duplicates found: " $arr[$i].Name, $arr[$i-1].Name
}
}
如果Name属性与其前面的数组中的名称相同,理论上它应该返回重复的名称。然而,它只是一遍又一遍地循环和打印一个随机对象的名称。做什么?
发布于 2022-10-07 09:41:43
不需要使用Compare-Object
循环就可以做到这一点。
为了演示,在$a
中,我有您的对象数组,按属性名称排序:
$a = @'
Name,SomeValue
foo,1
bar,2
baz,3
bar,4
foo,5
bar,6
'@ | ConvertFrom-Csv | Sort-Object Name
若要输出复制项,请执行以下操作
$b = $a | Select-Object Name -Unique
Compare-Object -Property Name -ReferenceObject $a -DifferenceObject $b -PassThru | Select-Object * -ExcludeProperty SideIndicator
给你这个结果:
Name SomeValue
---- ---------
bar 4
bar 6
foo 5
使用Group-Object
和ForEach对象循环可以实现相同的目标:
$a | Group-Object Name | Where-Object {$_.Count -gt 1} | ForEach-Object {
$_.Group | Select-Object -Skip 1
}
https://stackoverflow.com/questions/73989299
复制相似问题