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

これはそれを行う必要があります:

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

編集:バグが今すぐ機能するはずですが、テストする共有ポイントサイトがないことがわかりました。機能するかどうか教えてください。確実にするために、これを実行する前におそらくバックアップする必要があります。

于 2013-06-14T15:42:07.843 に答える