B - PROBLEMS :
Admins cannot "edit" Read-Only fields at SharePoint in a straight-forward method.
C - SOLUTION:
As an admin, you can open Powershell and run the below code to update these Read-Only fields:
Experiment 1: to update Modified Time, Created Time, Author & Editor
$author = New-Object Microsoft.SharePoint.SPFieldUserValue($web,”1111;#User Display Name”) #1111 is User ID in All People List $item[“Author”] = $author $item.Properties[“vti_author”] = $author.User.LoginName $item[“Editor”] = $author $item.UpdateOverwriteVersion()
Result : Successful
Experiment 2: to update File/Folder Name, Modified/Created Time & Author/Editor
First Try:
# get the original metadata $personEditor = $Folder.Item["Editor"] $timeModified = $Folder.Item["Modified"] # update the folder name $Folder.Item["Name"] = "New Name" # revert the original metadata back $Folder.Item["Editor"] = $personEditor $Folder.Item["Modified"] = $timeModified $Folder.Item.UpdateOverwriteVersion()
Result : Failed (Folder Name is updated but Modified Time & Editor are not updated)
Second Try:
# get the original metadata $personEditor = $Folder.Item["Editor"] $timeModified = $Folder.Item["Modified"] # update the folder name $Folder.Item["Name"] = "New Name" # THIS LINE IS IMPORTANT TO BE ADDED IN $Folder.Item.UpdateOverwriteVersion() # revert the original metadata back $Folder.Item["Editor"] = $personEditor $Folder.Item["Modified"] = $timeModified $Folder.Item.UpdateOverwriteVersion()
Result : Successful (All fields are updated properly).
D - SOURCE CODE:
[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”) $site = New-Object Microsoft.SharePoint.SPSite(“http://sharepoint/subsite”) $web = $site.OpenWeb() $doclib = $web.Lists[“TestDocLib”] Write-Host “SharePoint Object: ” $doclib.basetype foreach($item in $doclib.Items){ Write-Host “Created By – Old Value: ” $item[“Author”] $author = New-Object Microsoft.SharePoint.SPFieldUserValue($web,”1111;#User Display Name”) #1111 is User ID in All People List $item[“Author”] = $author $item.Properties[“vti_author”] = $author.User.LoginName $item[“Editor”] = $author $item.UpdateOverwriteVersion() Write-Host “Created By – New Value: ” $item[“Author”] }