Recently was asked to update the hyperlink field in a SharePoint list. The list had thousands of links pointing to a server we were moving, so the URL in the list needed to updated to reflect the new location. The only options I could think of, were to open SQL Server and do find/update against the content database(s). Well, Microsoft doesn’t like up playing with the SharePoint databases. So I cracked open PowerShell and went to town trying to figure this out.
#Add-PSSnapin Microsoft.SharePoint.PowerShell $siteUrl = "http://sharepoint/SiteCollection/SiteName" $webName = “SiteName” $listName = "Name of your list" $spSite = new-object Microsoft.SharePoint.SPSite($siteurl) $spWeb = $spSite.OpenWeb($webName) $spList = $spWeb.Lists[$listName] foreach($Item in $spList.Items ) { $ofldurl= new-object Microsoft.SharePoint.SPFieldUrlValue($Item["URL"]) $ofldurl.URL = $ofldurl.URL.Replace("Nacho", "Taco") $ofldurl.Description = $ofldurl.Description.Replace("Nacho", "Taco") $item["URL"] = $ofldurl $item.update() } $spWeb.Dispose()
What I’m doing here is replacing part of the URL string with a new word. The script is looking for the string Nacho and replacing it with Taco.
**** update ****
After migrating from SharePoint / WSS 2007 to SharePoint 2010, we started to notice some of our URLs were messed up. Web parts ( Page Viewer) and internal hyperlinks were pointing to an incorrect location.
example:
http://sharepoint/crmsp/customers/sitename/_layouts/1033/mngsubwebs.aspx?view=sites
Notice the 1033, no bueno!
Using the script above, i was able to update the links.
#Add-PSSnapin Microsoft.SharePoint.PowerShell $siteUrl = "http://sharepoint/SiteCollection/SiteName" $webName = “SiteName” $listName = "Name of your list" $spSite = new-object Microsoft.SharePoint.SPSite($siteurl) $spWeb = $spSite.OpenWeb($webName) $spList = $spWeb.Lists[$listName] foreach($Item in $spList.Items ) { $ofldurl= new-object Microsoft.SharePoint.SPFieldUrlValue($Item["URL"]) $ofldurl.URL = $ofldurl.URL.Replace("1033/", "") $ofldurl.Description = $ofldurl.Description.Replace($ofldurl.Description, $ofldurl.Description) $item["URL"] = $ofldurl $item.update() } $spWeb.Dispose()
In SharePoint 2016, the Description property appears broken?
This is the only way I could manage to set the URL and display text:
$newItem[“LinkField”] = "http://taco.com, taco2"