我有一个对象集合,名为$items
:
我想要筛选$items
,使其不包含FullName
属性重复的对象,并且唯一的对象是最新的。
由于我找不到如何做到这一点,我的解决方法是首先创建一个只包含以FullName
属性命名的重复项的新对象,即$duplicateItems
:
$arrDuplicates = @{}
$duplicateItems = foreach ($row in $restoreItems.FullName) {
if ($arrDuplicates.ContainsKey($row) -and $arrDuplicates[$row] -lt 2) {
$row
}
$arrDuplicates[$row] += 1
}
接下来我试着遍历$items
,如果当前的$item.FullName
存在于$duplicateItems
中,则选择具有最新的DeletedDate
对象并恢复它:
foreach ($item in $items) {
if ($item.FullName -in $duplicateItems) {
$filteredItem = $items | Where-Object {$_.FullName -eq $item.FullName} | Sort-Object DeletedDate | Select-Object -Last 1
$filteredItem.Restore()
}
$items = items | Where-Object {$_.FullName -ne $item.FullName}
}
我认为如果使用 $items = items | Where-Object {$_.FullName -ne $item.FullName}
这部分,循环将只对唯一的对象进行 $filteredItem.Restore()
操作,而不是所有的 $items
。
我相信有一种更简单的方法来过滤 $items
,使其不包含根据 FullName
属性重复的对象,但唯一的对象是具有最新日期的对象。
.GetEnumerator()
添加到其中。因此它将是$items.GetEnumerator()
。 - Drew$items | Sort-Object DeletedDate -Descending | Select-Object Fullname -Unique
吗? - Paxz$items
不是一个哈希表(“对象集合”-请参见第一个屏幕截图;尽管它的名称是$arrDuplicates
,但它是一个哈希表)。 - mklement0