SharePoint: Replace hyperlink paths in CEWP by using Powershell

Upgrading portal or changing its domain name leaves old hyperlink paths in the Content Editor WebParts and there is no way to upgrade hyperlinks such as just only by changing Managed paths entries. Luckily, we modified a script written by Johnny Bouder (link here) according to update all hyperlink paths to correct format.

param([string]$url,[string]$oldpath,[string]$newpath)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") | out-null;
[System.Reflection.Assembly]::LoadWithPartialName("System.Xml");
 
function SP-Web-CleanCEWPContent ($w) {
$file = $w.GetFile("default.aspx");
if ($file.Exists) {
$webPartManager = $w.GetLimitedWebPartManager($file.Url,[System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared);
$webParts = $webPartManager.WebParts;
foreach($webPart in $webParts) {
$checkString = "*" + $oldpath + "*";
if ($webPart.GetType() -eq [Microsoft.SharePoint.WebPartPages.ContentEditorWebPart] -and $webPart.Content.InnerText -like $checkString ) {
$oldElement = $webPart.Content;
$oldText = $webPart.Content.InnerText;
$xmlDoc = New-Object System.Xml.XmlDocument;
$xmlElement = $xmlDoc.CreateElement("MyElement");
$xmlElement.InnerText = $oldText.Replace($oldpath,$newpath);
$webPart.Content = $xmlElement;
$webPartManager.SaveChanges($webPart);
Write-Host -ForegroundColor Red "Updating web at "$w.Url;
}
}
}
}
function SP-ProcessSubwebs($ww) {
SP-Web-CleanCEWPContent($ww);
Write-Host("Processing web at " + $ww.Url);
if ($ww.Webs.Count -gt 0) {
foreach($sw in $ww.Webs) {
SP-ProcessSubwebs($sw);
}
}
}
$site = New-Object Microsoft.SharePoint.SPSite($url);
$web = $site.RootWeb;
SP-ProcessSubwebs($web);

Easy usage, just only type ./script.ps1 -url http://newPortalAddress -oldpath http://oldPortalAddress -newpath http://newPortalAddress .

Trefný Luděk

Author Trefný Luděk

More posts by Trefný Luděk

Leave a Reply