0

有没有办法使用 powershell 在 SharePoint 列表中查找重复值并将它们重命名为“_1”、“_2”、“_3”等。

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

在此处输入图像描述

因此,对于上面突出显示的具有重复“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++
}

感谢您的任何建议...

4

1 回答 1

2

This should do it:

#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++
    }
}

Edit: just found a bug should work now but don't have a sharepoint site to test let me know if it works. You should probably backup before running this to be sure.

于 2013-06-14T15:42:07.843 回答