Skip to main content

Update List Items : Replace a value in a field which contains some text(URL in this case)


Consider a scenario wherein you need to replace a part of value in single line of text.

1) Fetch List Items based on a particular condition using CAML Query
Eg: Get all list items where status = "In Progress" and Content Type ="My Content"

2) From the list items returned by CAML query, modify and replace a particular string from a value.

3) Column type is single line of text

Add-PSSnapin Microsoft.Sharepoint.Powershell
cls
#Log Variables
$LogFolderPath = "C:\Logs\"  # LogFolderPath
# Text File Path
$LogFilePath = $LogFolderPath+ "txtLog_WF_UPDATE_"+(Get-Date).ToString("MM_dd_yyyy_hh_mm_ss")+".txt"
# CSV Log File Path with current time stamp
$CSVLogFilePath=$LogFolderPath+ "CsvLog_WF_UPDATE_"+(Get-Date).ToString("MM_dd_yyyy_hh_mm_ss")+".csv"


#SP variables
$web=$null ;
$list=$null;
$SiteURL = "http://mysharepointsite:30042/sites/en-us"# Library Site Url
$ListName = "Pages";
$RowLimitValue="500"


#Logging the execution start time
Try  
{
    Write-Host "Started Script Execution at "  (Get-Date).ToString("MM-dd-yyyy HH:mm:ss") -ForegroundColor Green
   "Started Script Execution at " + (Get-Date).ToString("MM-dd-yyyy HH:mm:ss") | Out-File $LogFilePath -Append
}

Catch
{  
    Write-Host "Issue in accessing the LogFile path $LogFilePath, Please check it is a valid path and the user has permissions on it. Failed with error : " + $_.Exception.Message + " at " + (Get-Date).ToString("MM-dd-yyyy HH:mm:ss")
    Exit
}

#Pre-requisite checks
Try  
{
    #Web Check
    $web = Get-SPWeb $SiteURL
    if($web -eq $null)
    {
      Write-Host "Cannot find an SPSite object that contains the following Id or Url: $SiteURL"  $_.Exception.Message
      "Cannot find an SPSite object that contains the following Id or Url: $SiteURL"+ $_.Exception.Message + " at " + (Get-Date).ToString("MM-dd-yyyy HH:mm:ss") | Out-File $LogFilePath -Append  
       Exit
    }

    #List Check
    $list = $web.Lists[$ListName]
    if($list -eq $null)
    {
 
       Write-Host "Cannot find a List with the Name: $ListName in the web  "  $_.Exception.Message
      "Cannot find a List with the Name: $ListName in the web "+ $_.Exception.Message + " at " + (Get-Date).ToString("MM-dd-yyyy HH:mm:ss") | Out-File $LogFilePath -Append  
       Exit
    }  
   
  }

Catch
{  
    Write-Host  "Unable to connect to the Site, Please check the Url . Failed with error : " + $_.Exception.Message
    "Unable to connect to the Site, Please check the Url . Failed with error : " + $_.Exception.Message + " at " + (Get-Date).ToString("MM-dd-yyyy HH:mm:ss") | Out-File $LogFilePath -Append  
    Exit
}

if($list -ne $null)
{
    Write-Host  "Quering the list to get all Items with specific condition ...." -ForegroundColor Yellow
    "Quering the list to get all Items with specific condition ...."  | Out-File $LogFilePath -Append  
 
    $spQuery = New-Object Microsoft.SharePoint.SPQuery
    $spQuery.ViewFields  = "<FieldRef Name='Article_x0020_ID' />
                            <FieldRef Name='ID' />";
    $spQuery.ViewAttributes = "Scope='Recursive'";
    $spQuery.RowLimit = $RowLimitValue  
    $spQuery.Query = "<Where>
                           <And>
                                <Eq>
                                    <FieldRef Name='ContentType' /><Value Type='Computed'>My Content</Value>
                                </Eq>
                                <Eq>
                                    <FieldRef Name='Status' /><Value Type='Choice'>IN PROGRESS</Value>
                                </Eq>
                            </And>
                      </Where>"

    $col=$list.GetItems($spQuery)
     
    if($col.Count -gt 0)
    {
       Write-Host "Started Updating the value for IN-Progress ITEMS ..."  
      "Started Updating the IN-Progress Items at ...  " + (Get-Date).ToString("MM-dd-yyyy HH:mm:ss") | Out-File $LogFilePath -Append
       do
        {
            $listItems = $list.GetItems($spQuery)

             $spQuery.ListItemCollectionPosition = $listItems.ListItemCollectionPosition                

            foreach($item in $listItems)                                                                                                                          
            {            
                      $ID = $item["ID"]
                      $TopsURL  = "https://www.mysite.[ARTICLEID].html"
                      $newTopsURL = $TopsURL.Replace('[ARTICLEID]', "new value")
                      $item["Article_x0020_ID"] = $newTopsURL
                      $item.SystemUpdate()
                      write-host "Update Test Done!!!"


                      New-Object -TypeName PSCustomObject -Property @{
                                                               
                                RESULT="LOGS"    
                                ID =  $item["ID"]
                                CHECKEDOUTTO=  $item["CheckoutUser"]      
                                UPDATEDVAL= $item["Article_x0020_ID"]
                                STATUS =   $item["Status"]                  
   
                             } | Export-Csv -Path $CSVLogFilePath -NoTypeInformation -Append
             
           }

      }while ($spQuery.ListItemCollectionPosition -ne $null)
    }
    else
    {
        Write-Host  "No records found"
        "No records found" + (Get-Date).ToString("MM-dd-yyyy HH:mm:ss") | Out-File $LogFilePath -Append
    }  
}
else
{
   Write-Host "No List with Name "+$ListName  
   "No List with Name "+ $ListName    | Out-File $LogFilePath -Append
}

Comments

Popular posts from this blog

How to get lookup value(username) from people picker column using JavaScript(Client Object Model)?

Recently I faced an issue on fetching username from people picker column. Below is the code which can be used in such scenarios- // JavaScript source code function getUsers() { //Get the current client context ctx = new SP.ClientContext(webUrl); // Get Web web = ctx.get_web(); // Get List list = web.get_lists().getByTitle("My List"); camlQry = new SP.CamlQuery(); //Traverse through all files and folders deep and get some people picker fields like "Author" camlQry.set_viewXml('<View Scope=\'RecursiveAll\'>' + '<Query>' + '<ViewFields>' + '<FieldRef Name=\'' + colValuesEnum.Title + '\' />' + '<FieldRef Name=\'' + colValuesEnum.Author + '\' />' + '</ViewFields> ' + '</View>'); listItem = list.getItems(camlQry); ctx.load(listItem); ctx.executeQueryAsync(success, failed); } //Success CallBack Function fun

Angular JS Routing Step by Step using Visual Studio.

In this post, we will see step by step how to create an Angular JS Project using Visual Studio. This is for beginners only J Before we start, make sure ·         You have very basic understanding of AngularJS ·         Basic understanding of Routing ·         Beginner level knowledge on html5 ·         Hands-On using Visual Studio 1.       Open Visual Studio and click “new project”. Select “ASP.NET Web Application”. Enter Project Name, Location and Solution Name . 2.   Create an “ Empty ” ASP.NET Web Application as shown in below figure 3.  Open Solution Explorer, right click on the solution and click “Manage Nuget Packages” Install Angular.js Once installed, you will see all Angular.JS references in “Scripts” folder. 4.    In Solution Explorer, create a folder “views” and add three html pages as shown below: Below is the code for Index.html : <!DOCTYPE html> <html ng-app="app"> <

SharePoint Script to update MMD Column in Library

This post contains the code to update Managed Metadata column value in Library. Add-PSSnapin Microsoft.Sharepoint.Powershell cls #Log Variables $basePath = split-path $SCRIPT:MyInvocation.MyCommand.Path -parent Set-Location $basePath #SP variables $web=$null ; $list=$null; $SiteURL = "https://mysharepointsite/en-us"# Library Site Url $ListName = "Pages";# List Name $FieldName="Document" $termStoreName = "Managed Metadata Service Application" $termGroupName = "Document_Content" $termSetName = "DocumentName" $MMDValueToUpdate = "Technical Doc" #Pre-requisite checks Try {     #Web Check     $web = Get-SPWeb $SiteURL     if($web -eq $null)     {       Write-Host "Cannot find an SPSite object that contains the following Id or Url: $SiteURL"  $_.Exception.Message        Exit     }     #List Check     $list = $web.Lists[$ListName]     if($list -eq $null)     {        Write-H