SharePoint Online: actualización creada por/modificada por, valores de campo creados/modificados mediante PowerShell
Requisito: Actualice la columna "Creado por" en SharePoint Online mediante PowerShell.
A veces, es posible que tenga que crear elementos de lista o configurar los campos de metadatos de elementos existentes, como los valores Creado por, Modificado por, Creado y Modificado, para un usuario y una marca de tiempo específicos. Digamos: está importando o migrando datos desde un recurso compartido de archivos de red a SharePoint Online y desea mantener estos metadatos iguales que el contenido de origen.
Debido a que SharePoint no le permite establecer estos valores desde la interfaz de usuario web, debemos usar PowerShell. Aquí está mi script de PowerShell para cambiar los detalles de quién creó un elemento, lo modificó y cuándo lo creó y modificó. Este script establece campos del sistema (creados, creados por, modificados, modificados por) para un elemento específico en la lista/biblioteca. Establezca los valores en la sección de variables de forma adecuada y ejecute el script.
SharePoint Online: cambio creado mediante PowerShell
Script de PowerShell para actualizar los valores de campo Creado por, Modificado por, creado en, modificado en:
#Load SharePoint CSOM 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 for Processing
$SiteUrl = "https://crescent.sharepoint.com/sites/sales/"
$ListName= "Projects"
$ID=6
$UserID="Salaudeen@crescent.com"
$TimeStamp = "2015/12/01 02:10:00 AM"
#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 User
$User = $Ctx.Web.EnsureUser($UserID)
$ctx.Load($user)
#Get the list Item
$List=$Ctx.Web.Lists.GetByTitle($ListName)
$ListItem = $List.GetItemById($ID)
$Ctx.Load($ListItem)
#update created by column sharepoint online powershell
$ListItem["Author"] = $User
#Update Modified By
$ListItem['Editor'] = $User
#Set Created on & Modified on Time values
$ListItem["Created"] = $TimeStamp
$ListItem["Modified"] = $TimeStamp
#Update List item
$ListItem.Update()
$ctx.ExecuteQuery()
Write-host "Metadata values updated Successfully!" -f Green
Este script de PowerShell establece los valores del campo de metadatos del elemento en SharePoint Online y el resultado va aquí:
Para SharePoint local, utilice este script de PowerShell: actualice los campos de metadatos "Creado por", "Última modificación" de un elemento de lista mediante PowerShell
De manera similar, para los documentos, puede utilizar el siguiente código para actualizar sus metadatos:
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.Runtime.dll"
#Variables
$SiteURL = "https://crescent.sharepoint.com/Sites/Marketing"
#Define Metadata
$CreatedBy = "salaudeen@crescent.com"
$ModifiedBy = "salaudeen@crescent.com"
$CreatedOn = "01/01/2017"
$ModifiedOn ="01/01/2018"
#Get Credentials to connect
$Cred = Get-Credential -Message "Enter the Admin Credentials:"
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
#Get the File
$File = $Ctx.Web.GetFileByServerRelativeUrl("/sites/marketing/Migrate/Active%20Projects/Requirements.docx")
$Ctx.Load($File)
$Ctx.ExecuteQuery()
#Get 'Created By' and 'Modified By' Users
$Author = $Ctx.Web.EnsureUser($CreatedBy)
$Ctx.Load($Author)
$Editor= $Ctx.Web.EnsureUser($ModifiedBy)
$Ctx.Load($Editor)
$Ctx.ExecuteQuery()
#update Metadata of the File
$ListItem = $File.ListItemAllFields
$Listitem["Author"] = $Author
$ListItem["Editor"] = $Editor
$ListItem["Created"] = $CreatedOn
$ListItem["Modified"] = $ModifiedOn
$ListItem.Update()
$Ctx.ExecuteQuery()
PnP PowerShell para actualizar los metadatos de los elementos de la lista
Para configurar metadatos como valores de campo creados, modificados, creados por y modificados por, utilice este PnP PowerShell:
#Parameters
$SiteURL= "https://crescent.sharepoint.com/sites/Projects"
$ListName = "Projects"
$ItemID = "2"
$Created = "2018-01-01T12:00:00-00:00"
$Modified = "2018-02-02T10:30:00-00:00"
$CreatedBy= "Salaudeen@crescent.com"
$ModifiedBy= "Salaudeen@crescent.com"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
Set-PnPListItem -List $ListName -Identity $ItemID -Values @{"Created"=$Created;"Modified"=$Modified; "Author"= $CreatedBy; "Editor"= $ModifiedBy}
Puede usarlo para actualizar metadatos tanto para elementos de lista como para documentos en SharePoint Online. De manera similar, para configurar los metadatos de un archivo existente, use:
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/branding"
$ListName = "Brand"
$SiteRelativeURL = "/Brand/Technical Design.docx"
$CreatedBy= "Salaudeen@crescent.com"
$Title = "New Design Document V2.docx"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get the File from SharePoint
$File = Get-PnPFile -Url $SiteRelativeURL -AsListItem
#Update document properties
Set-PnPListItem -List $ListName -Identity $File.Id -Values @{"Title" = $Title; "Author" = $CreatedBy; "Editor" = $CreatedBy}
Para actualizar los valores de metadatos de la carpeta, use:
#Parameters
$SiteURL = "https://Crescent.sharepoint.com/sites/Sales"
$ListName = "Documents"
$FolderServerRelativeURL = "/sites/Sales/Shared Documents/Samples"
#Connect to SharePoint Online site
Connect-PnPOnline -Url $SiteURL -Interactive
#Get the Folder
$Folder = Get-PnPFolder -Url $FolderServerRelativeURL -Includes ListItemAllFields
#Update Folder's Created By and Modified By Values
Set-PnPListItem -List $ListName -Identity $Folder.ListItemAllFields.Id -Values @{"Author" = "Steve@Crescent.com"; "Editor"="Steve@Crescent.com" } | Out-Null
Actualización creada por, modificada por para todos los archivos de una biblioteca de documentos
Esta vez actualicemos los valores de los campos creados por, modificados por, creados y modificados para todos los archivos en una biblioteca de documentos de SharePoint Online.
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName = "Branding"
$CreatedBy = "Salaudeen@crescent.com"
$ModifiedBy = "Salaudeen@crescent.com"
$Created = "2018-01-01T12:00:00-00:00"
$Modified = "2018-02-02T10:30:00-00:00"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get all Files from the document library
$ListItems = Get-PnPListItem -List $ListName -PageSize 2000 -Fields Author | Where {$_.FileSystemObjectType -eq "File"}
#Update document properties
$ListItems | ForEach-Object {
Set-PnPListItem -List $ListName -Identity $_.Id -Values @{"Created"=$Created; "Modified"=$Modified; "Author" = $CreatedBy; "Editor" = $ModifiedBy; } | Out-Null
Write-host "Metadata Set to "$_.FieldValues.FileRef -f Green
}
Este script escanea y actualiza los metadatos de todos los documentos almacenados en una biblioteca, incluidos los archivos de todas las carpetas.
