我有一个包含数千条记录的列表,我需要它们是唯一的。我在网上找到了一个PowerShell脚本,如果我只有一个唯一的列,它将起作用。但是,我必须按2列分组,我无法弄清楚如何使其工作。
例如,如果我在SP列表中包含此数据,则仅当两列都重复时才应删除项目。
Title Carrier
1 Carrier1
1 Carrier1 *Remove This One
12 Carrier1
12 Carrier2
100 Carrier1
100 Carrier1 *Remove This One
100 Carrier2
以下是我在网上找到的代码示例,该代码示例适用于1列,但不适用于2列。
cls
if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {
Add-PSSnapin Microsoft.SharePoint.PowerShell;
}
$ListName = "DuplicateTest"
$web = Get-SPWeb -identity "http://MyVM/sites/TestSite"
$list = $web.Lists[$ListName]
$AllDuplicates = $list.Items.GetDataTable() | Group-Object Title | where {$_.count -gt 1}
$count = 1
$max = $AllDuplicates.Count
foreach($duplicate in $AllDuplicates)
{
$duplicate.group | Select-Object -Skip 1 | % {$list.Items.DeleteItemById($_.ID)}
Write-Progress -PercentComplete ($count / $max * 100) -Activity "$count duplicates removed" -Status "In Progress"
$count++
}
答案 0 :(得分:1)
实际上,您可能希望将Select-Object
与-Unique
和-Property
参数一起使用。
$Deduped$list.Items.GetDataTable() | Select-Object -Property Title, Carrier -Unique;