是否有办法使用PowerShell在SharePoint列表中查找重复值并将其重命名为“_1”,“_ 2”,“_ 3”等。
作为我的测试“产品”列表中的示例,我有以下项目:
因此,对于上面突出显示的具有重复“SAPMaterial”值的项目,有没有办法使用powershell遍历列表来查找具有重复值的项目,然后如果找到重复值,则更新其“SAPMaterial”价值如:
依旧......
我想知道如何使用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++
}
感谢您的任何建议......
答案 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网站来测试让我知道它是否有效。你应该在运行之前进行备份以确定。