Error when re-activating Employee Training Management

A feature must be re-activated when it is upgraded to a newer version. If you are upgrading several SharePoint sites, you can save a lot of time by using a SharePoint power shell script to re-activate the feature. We have, however, become aware of an error which you may receive when re-activating Employee Training Management. The error message is as follows:

Exception calling "Add" with "1" argument(s): "A list, survey, discussion board
, or document library with the specified title already exists in this Web site.
  Please choose another title."
Exception calling "Add" with "1" argument(s): "A list, survey, discussion board
, or document library with the specified title already exists in this Web site.
  Please choose another title."

This error occurs when lists have been renamed and you try to re-activate the feature. It can, however, be fixed easily by entering a script into the SharePoint Management Shell.

$webs = Get-SPWebApplication | Get-SPSite -Limit All | Get-SPWeb -Limit All
$featureID = [Guid]"26583aab-d708-4dc1-92f1-36843fafcb40"
 
 
 
ForEach($w in $webs){
    if($w.Features[$featureID])
    {
        write-host ("Web: " + $w.Url)
        try{
            $listNames = @(("Lists/Enrollments", "Enrollments"),("Lists/Feedbacks", "Feedback"),("Lists/PrimarySkills", "Primary Skills"),("Lists/Topics", "Training Catalog"),("Lists/Trainer", "Trainers"),("Lists/Trainings", "Scheduled Training Events"))
            $trainingLists = $w.Lists | where { $_.TemplateFeatureID -eq $featureID }
            ForEach($l in $trainingLists){
                $listName = $listNames | where { $_[0] -eq $l.RootFolder.Url }
                if($listName){
                    if($l.Title -ne $listName[1]){
                        $currentTitle = $l.Title
                        $l.Title = $listName[1]
                        $listName[1] = $currentTitle
                        $l.Update();
                        write-host ("List renamed from " + $currentTitle + " to " + $l.Title);
                    }
                }
            }
            $w.Features.Remove($featureID);
            write-host "Feature deactivated"
            $w.Features.Add($featureID);
            write-host "Feature activated"
        }
        catch [exception]
        {
            write-host ("An error occurred: " + $_.Exception.Message)
        }
        finally{
            ForEach($l in $trainingLists){
                $listName = $listNames | where { $_[0] -eq $l.RootFolder.Url }
                if($listName){
                    if($l.Title -ne $listName[1]){
                        $currentTitle = $l.Title
                        $l.Title = $listName[1]
                        $listName[1] = $currentTitle
                        $l.Update()
                        write-host ("List renamed from " + $currentTitle + " to " + $l.Title);
                    }
                }
            }
        }
    }
} 
$webs = Get-SPWebApplication | Get-SPSite -Limit All | Get-SPWeb -Limit All
$featureID = [Guid]"26583aab-d708-4dc1-92f1-36843fafcb40"



ForEach($w in $webs){
    if($w.Features[$featureID])
    {
        write-host ("Web: " + $w.Url)
        try{
            $listNames = @(("Lists/Enrollments", "Enrollments"),("Lists/Feedbacks", "Feedback"),("Lists/PrimarySkills", "Primary Skills"),("Lists/Topics", "Training Catalog"),("Lists/Trainer", "Trainers"),("Lists/Trainings", "Scheduled Training Events"))
            $trainingLists = $w.Lists | where { $_.TemplateFeatureID -eq $featureID }
            ForEach($l in $trainingLists){
                $listName = $listNames | where { $_[0] -eq $l.RootFolder.Url }
                if($listName){
                    if($l.Title -ne $listName[1]){
                        $currentTitle = $l.Title
                        $l.Title = $listName[1]
                        $listName[1] = $currentTitle
                        $l.Update();
                        write-host ("List renamed from " + $currentTitle + " to " + $l.Title);
                    }
                }
            }
            $w.Features.Remove($featureID);
            write-host "Feature deactivated"
            $w.Features.Add($featureID);
            write-host "Feature activated"
        }
        catch [exception]
        {
            write-host ("An error occurred: " + $_.Exception.Message)
        }
        finally{
            ForEach($l in $trainingLists){
                $listName = $listNames | where { $_[0] -eq $l.RootFolder.Url }
                if($listName){
                    if($l.Title -ne $listName[1]){
                        $currentTitle = $l.Title
                        $l.Title = $listName[1]
                        $listName[1] = $currentTitle
                        $l.Update()
                        write-host ("List renamed from " + $currentTitle + " to " + $l.Title);
                    }
                }
            }
        }
    }
} 

These scripts rename any lists with changed names and then update the feature. The lists are then changed back to their original names.

I hope you found this information useful. If you have any problems or any other questions, please send an e-mail to support@sapiens.at or post a comment.