SharePoint Online: Update Hyperlink Field Value using PowerShell

Requirement: Update hyperlink field in SharePoint Online using PowerShell

sharepoint online powershell 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
}

Similarly, we can update existing hyperlink field values using PowerShell in SharePoint Online. Let’s update all link list items with 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
}

To set Hyperlink or Picture field values using PnP PowerShell, 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 -Credentials (Get-Credential)

#Update Hyperlink column value using PowerShell
Set-PnPListItem -List $ListName -Identity $ItemID -Values @{"CompanyWebsite"= "https://www.CrescentTech.com, Crescent Technologies Inc."}

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? 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!"
    }
}

Salaudeen Rajack

Salaudeen Rajack - SharePoint Expert with Two decades of SharePoint Experience. Love to Share my knowledge and experience with the SharePoint community, through real-time articles!

6 thoughts on “SharePoint Online: Update Hyperlink Field Value using PowerShell

  • 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

    Reply
  • 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 ?

    Reply
  • Could you direct me to Create a calculated hyperlink column in SharePoint Online?

    Reply
  • 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()

    Reply

Leave a Reply

Your email address will not be published.