Powershell用于查找和重命名列表项中的重复值

时间:2013-06-14 13:59:05

标签: powershell sharepoint-2010 listitem

是否有办法使用PowerShell在SharePoint列表中查找重复值并将其重命名为“_1”,“_ 2”,“_ 3”等。

作为我的测试“产品”列表中的示例,我有以下项目:

enter image description here

因此,对于上面突出显示的具有重复“SAPMaterial”值的项目,有没有办法使用powershell遍历列表来查找具有重复值的项目,然后如果找到重复值,则更新其“SAPMaterial”价值如:

  • 000000000000227142_1
  • 000000000000227142_2

依旧......

我想知道如何使用powershell执行此操作的原因是因为我们有一个包含大约300个项目的列表,而且对于很多这些项目,“SAPMaterial”列中的值都有重复项。这将永远手动完成。

到目前为止,我的powershell如下:

#Add-PSSnapin microsoft.sharepoint.powershell
$web = Get-SPWeb -Identity "siteURL/"
$list = $web.Lists["Products"]

$AllDuplicates = $list.Items.GetDataTable() | Group-Object SAPMaterial | where  
{$_.count -gt 1}
$count = 1
$max = $AllDuplicates.Count
foreach($duplicate in $AllDuplicates)
{
$duplicate.group | Select-Object -Skip 1 | % {$list.GetItemById($_.ID).Delete()}
Write-Progress -PercentComplete ($count / $max * 100) -Activity "$count duplicates   
removed" -Status "In Progress"
$count++
}

感谢您的任何建议......

1 个答案:

答案 0 :(得分:2)

这应该这样做:

#Add-PSSnapin microsoft.sharepoint.powershell
$web = Get-SPWeb -Identity "siteURL/"
$list = $web.Lists["Products"]

$AllDuplicateNames = $list.Items.GetDataTable() | Group-Object SAPMaterial | ?{$_.count -gt 1} | %{$_.Name}
foreach($duplicate in $AllDuplicateNames) {
    $dupsaps = $list.Items | ?{$_["SAPMaterial"] -eq $duplicate}
    $count = 1
    foreach($sap in $dupsaps) {
        $sap[“SAPMaterial”] = $duplicate + "_" + $count
        $sap.Update()
        $count++
    }
}

编辑:刚发现一个bug现在应该可以正常工作,但没有一个sharepoint网站来测试让我知道它是否有效。你应该在运行之前进行备份以确定。