SharePoint Online: Update Hyperlink Field Value using PowerShell
Requirement: Update a hyperlink field value in SharePoint Online using PowerShell.
SharePoint Online PowerShell to Update Hyperlink Field
Hyperlink fields can be used to link documents, list items, pages, and more. In some cases, you may need to update the hyperlink URL or link text for existing items in your SharePoint Online list. This blog post will show you how to update a hyperlink field value in SharePoint using the PowerShell script.
Let’s add a new link item to the Link list using PowerShell:
#Load SharePoint Online Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Variables
$SiteURL="https://crescent.sharepoint.com"
$ListName = "Quick Links"
$FieldName = "URL"
#Get Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
#Get the List
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Add New Item to Link list
If($List -ne $Null)
{
$ListItemInfo = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation
$ListItem = $List.AddItem($ListItemInfo)
$ListItem["Title"] = "Support Center"
#Set Hyperlink field properties
$Link = New-Object Microsoft.SharePoint.Client.FieldUrlValue
$Link.Url = "https://Crescent.sharepoint.com/sites/support"
$Link.Description = "Support Center URL"
#Update Hyperlink Field
$ListItem[$FieldName] = [Microsoft.SharePoint.Client.FieldUrlValue]$Link
$ListItem.Update()
$Ctx.ExecuteQuery()
Write-host "New Item Added to Link List!" -ForegroundColor Green
}
Find and Replace Hyperlinks using PowerShell:
Similarly, we can update existing hyperlink field values using PowerShell in SharePoint Online. Let’s update all link list items with the URL “/sites/support” with “/sites/supportV2”.
#Load SharePoint Online Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Variables
$SiteURL="https://crescent.sharepoint.com"
$ListName = "Quick Links"
$FieldName = "URL"
#Hyperlink Field Values
$HyperLinkValue = "Support Center"
$HyperLinkURL = "/sites/support" #Provide FULL URL for External URLs
$HyperLinkNewURL = "/sites/supportV2"
#Get Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
#Get the List
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Define the CAML Query to Filter by Hyperlink value and Get List Item
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View>
<Query>
<Where>
<Eq >
<FieldRef Name='$FieldName' /><Value Type='URL'>$HyperLinkURL</Value>
</Contains >
</Eq>
</Query>
</View>"
#Get All List Items matching the query
$ListItems = $List.GetItems($Query)
$Ctx.Load($ListItems)
$Ctx.ExecuteQuery()
#Update the List Item's Hyperlink Field value
If($ListItems.Count -gt 0)
{
ForEach($Item in $ListItems)
{
#Get Hyperlink field value and update
$HyperLinkField = [Microsoft.SharePoint.Client.FieldUrlValue]$Item[$FieldName]
$HyperLinkField.Url = $HyperLinkNewURL
$HyperLinkField.Description = $HyperlinkDescription
#Update Hyperlink Field
$Item[$FieldName] = $HyperLinkField
$Item.Update()
$Ctx.ExecuteQuery()
Write-host "Hyperlink Field Value Updated in Link List!" -ForegroundColor Green
}
}
Else
{
Write-host "Hyperlink Field Value '$($HyperLinkURL)' Not Found in Link List!" -ForegroundColor Yellow
}
PnP PowerShell to Update Hyperlink Column in SharePoint Online:
To set Hyperlink or Picture field values using PnP PowerShell cmdlet Set-PnPListItem, use: @{“Hyperlink” = “https://URL, LinkText”} format.
#Config Variables
$SiteURL = "https://Crescent.sharepoint.com/sites/marketing"
$ListName = "Projects"
$ItemID = 1
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Update Hyperlink column value using PowerShell
Set-PnPListItem -List $ListName -Identity $ItemID -Values @{"CompanyWebsite"= "https://www.CrescentTech.com, Crescent Technologies Inc."}
This script connects to SharePoint Online using PnP PowerShell and updates the hyperlink column “CompanyWebsite” in a list item with ID “1”.
Find and Replace Links in SharePoint Online List using PnP PowerShell
How about finding & replacing a specific string in the URL or Description of a particular hyperlink field value in all list items using PnP PowerShell? You may often need to update the links to resources or locations as they grow and change. I had to find and replace all instances of an old value “horizon”, with a new value “crescent” in a SharePoint Online List.
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName = "Projects"
$ColumnName = "Project_x0020_Reference" #Internal Name of the Field
$OldString = "horizon" #Set it in lower case
$NewString = "crescent"
#Connect to SharePoint Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get All List Items
$ListItems = Get-PnPListItem -List $ListName -PageSize 2000
#Iterate through all items in the list
ForEach ($Item in $ListItems)
{
$Flag = $false
$URL = $Item.FieldValues[$ColumnName].URL.ToLower()
#Check if the URL has the old text
If($URL.contains($OldString))
{
$URL = $URL -Replace $OldString,$NewString
$Flag = $True
}
#check the description of the Hyperlink
$Description = $Item.FieldValues[$ColumnName].Description.ToLower()
If($Description.contains($OldString))
{
$Description = $Description -Replace $OldString,$NewString
$Flag = $True
}
#update the Hyperlink field if URL or Description has the old string
If($Flag -eq $True)
{
#Frame the URL field value
$Hyperlink = New-Object Microsoft.SharePoint.Client.FieldUrlValue
$Hyperlink.Url= $URL
$Hyperlink.Description= $Description
#Update Hyperlink field value
Set-PnPListItem -List $ListName -Identity $Item.Id -Values @{$ColumnName = [Microsoft.SharePoint.Client.FieldUrlValue]$Hyperlink} | Out-Null
Write-host -f Green "List Item $($Item.ID) Updated!"
}
}
By following the steps outlined in this guide, you can quickly and easily get the link you want to update, update the URL, and save the changes.
Hi Saluadeen Rajack,
Whenever i use the bottom script: ‘Find and Replace Links in SharePoint Online List using PnP PowerShell’ all adjusted description values will have no uppercase letters anymore. The links are being properly adjusted so that works but would like to have the uppercase letters in the description.
I also want to change all lists in a site collection to change the URL to a new location. Do you have any scripts for this?
Best regards
I am trying to update the hyperlink or picture column in SharePoint Online for multiple items, with reference your code but it gives error stating invalid url.
How can I use this to update multiple list items for thehyperlink column ?
Could you direct me to Create a calculated hyperlink column in SharePoint Online?
Here you go: How to Format Calculated Column as Hyperlink in SharePoint Online?
For some reason your code wouldn’t work in my SP 2013. But following worked. Thanks
$Link = New-Object Microsoft.SharePoint.SPFieldURLValue
$Link.Url = $linkUrl
$Link.Description = “Update Docs”
$item[“Update DTST”] = $Link.ToString()
$item.SystemUpdate()
Apparently, This script is for SharePoint Online! For On-premises, refer: How to Update Hyperlink Field Value in SharePoint using PowerShell