Update "Created By", "Last Modified" Metadata Fields of a List Item using PowerShell

Ever wanted to update SharePoint list or library item's metadata fields such as: "Created By" "Modified By" "Created" "Last Modified"? These column values must be updated while copying items from one list to another, programmatically.

Today, Had an another requirement to update metadata fields in a document stored in SharePoint document library. Lets update these metadata fields such as "Created By" "Modified By" "Created" "Last Modified" using PowerShell.
sharepoint change created by and modified by powershell

Update created by field using PowerShell in SharePoint:
The below script changes created by in SharePoint list item.
Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue
 
#Set Configuration Parameters
$WebURL = "http://portal.crescent.com/IQ/"
$ListName = "Questionnaire"
$ItemID = "147"
$UserName = "Crescent\Hamid"
 
#Get the Web, List, Item and User objects
$Web= Get-SPWeb $WebURL
$List= $web.Lists[$ListName]
$Item = $List.GetItembyID($ItemID)
$Author =$web.EnsureUser($UserName)
 
#update the created by & modified by columns
$Item["Author"] = $Author
$Item["Editor"] = $Author
$Item.SystemUpdate()

PowerShell Script to Update Metadata Fields in SharePoint:
Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue

#Define the Parameters
$WebURL = "http://sharepoint.crescent.com/projects/1033/"
$LibraryName = "Project Documents"
$DocumentName = "Project Schedules.xlsx"
$UserName = "Global\EricCo"
$DateValue = "2013-01-01 10:05" # Should be in "yyyy-mm-dd HH:mm" format

#Get the Web 
$web= Get-SPWeb $WebURL
#Get the Library
$list= $web.Lists[$LibraryName]
#Get the User
$Author =$web.EnsureUser($UserName)
#Get the document
$Document = $list.Items | where {$_.Name -eq $DocumentName}

#update created by column sharepoint programmatically
$Document["Author"] = $Author
#set modified by programmatically
$Document["Editor"] = $Author

#Set Created Date value
$Document["Created"] =  $DateValue
#Set Last Modified Date 
$Document["Modified"] = $DateValue

$Document.UpdateOverwriteVersion() #Can use $Document.SystemUpdate() as well..

5 comments:

  1. can i update the created by field for particular items
    i need to update all items created by domain1\user_name to be domain2\user_name
    my issue is that i moved all users in domain1 to domain2 with the same names but share point see them as a new different users
    i have only one list and all users have permission to access it and using a filter view to make every one see his data only " created_by = [ME] "
    so script moving permissions did not solve my problem to let every one see his old items created by his old user_name
    thanks and sorry for long text

    ReplyDelete
    Replies
    1. Add an IF condition with: $Item.File.Author -like "domain\user"

      Delete
  2. Hi Salaudeen, how can i update only those items which are created by particular
    users only ??

    ReplyDelete
    Replies
    1. You can Filter List items as: $ListItem.File.Author -like "domain\user". Or use CAML Query as in:
      How to Filter Person or Group Field value in PowerShell

      Delete
  3. Hi How to update the created date = modified date for all the documents in a library

    ReplyDelete

Please Login and comment to get your questions answered!

Powered by Blogger.