Upgrading SXA sites to 10.2 might fail with an error. The issue occurs due to the missing Redirects, /sitecore/templates/Feature/Experience Accelerator/Redirects/Redirect Maps template item under the Settings item of the site.
During the upgrade, the "Change Redirect Maps root item template" script tries to get and convert "Redirects" items from "Redirect Map Grouping" to "Redirect Maps" templates for each site and it fails.
To resolve the issue, upgrade your instance to SXA 10.3.0 or later.
Alternatively, you can use the following steps:
Import-Function Get-UniqueItem
Import-Function Select-SingleItemFromEachGroup
Import-Function Get-AllSxaSite
Import-Function Get-SettingsItem
Import-Function Get-ItemByIdSafe
Import-Function Invoke-SiteAction
[Sitecore.Data.ID]$redirectMapsTemplateID = "{C2DC4690-AF44-48C7-BB21-90D1AD246732}"
function ShouldRun () {
[Item[]]$sites = Get-SitesWithoutInsertOption
$sites.Length -gt 0
}
function Get-DialogParameters () {
}
function Get-SitesWithoutInsertOption() {
Get-AllSxaSite | % {
$settingsItem = Get-SettingsItem $_
[Sitecore.Data.ID]$redirectMapGroupID = "{E1CF805E-7F49-4EC9-A25A-182DC798CB5F}"
$redirectsRoot = $settingsItem.Children | ? { [Sitecore.Data.Managers.TemplateManager]::GetTemplate($_).InheritsFrom($redirectMapGroupID) } | Select-Object -First 1
if($redirectsRoot){
$isNewTemplate = [Sitecore.Data.Managers.TemplateManager]::GetTemplate($redirectsRoot).InheritsFrom($redirectMapsTemplateID)
if($redirectsRoot -ne $null -and $isNewTemplate -eq $false){
$redirectsRoot
}
}
}
}
function Invoke-UpgradeStep {
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true, Position = 0)]
$arguments
)
process {
$result = New-Object Sitecore.XA.Foundation.Upgrade.Model.UpgradeStepResult
try {
Get-SitesWithoutInsertOption | % {
if ($pscmdlet.ShouldProcess("$($_.Name)", "Change template of Redirects item")) {
Write-Host "Changing Redirects item template for '$($_.Paths.Path)'"
$redirectMapsTemplate = Get-Item master: -ID $redirectMapsTemplateID
$_.ChangeTemplate($redirectMapsTemplate)
}
}
$result.Result = "Success"
}
catch {
$result.Result = "Error"
$result.Message = $Error[0]
$result.ErrorObject = $Error[0]
}
finally {
$result
}
}
}