SharePoint Online:使用 PowerShell 更新创建者/修改者、创建/修改字段值
要求:使用 PowerShell 更新 SharePoint Online 中的“创建者”列。
有时,您可能需要创建列表项或将现有项的元数据字段(例如创建者、修改者、创建者和修改者值)设置为特定用户和时间戳。假设,您正在将数据从网络文件共享导入或迁移到 SharePoint Online,并且希望将此元数据保持与源内容相同。
由于 SharePoint 不允许您从 Web 用户界面设置这些值,因此我们必须使用 PowerShell。下面是我的 PowerShell 脚本,用于更改项目创建者、修改者以及创建和修改时间的详细信息。此脚本为列表/库中的特定项目设置系统字段(创建者、创建者、修改者、修改者)。适当设置变量部分中的值并运行脚本。
我不喜欢操纵这些元数据字段,除非确实需要!
SharePoint Online:使用 PowerShell 创建的更改
用于更新“创建者”、“修改者”、“创建于”、“修改于”字段值的 PowerShell 脚本:
#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
此 PowerShell 脚本在 SharePoint Online 中设置项目的元数据字段值,结果如下:
对于本地 SharePoint,请使用此 PowerShell 脚本:使用 PowerShell 更新列表项的“创建者”、“上次修改”元数据字段
同样,对于文档,您可以使用以下代码来更新其元数据:
#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 更新列表项元数据
要设置元数据,例如创建、修改、创建者和修改者字段值,请使用此 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}
您可以使用它来更新 SharePoint Online 中的列表项和文档的元数据。同样,要设置现有文件的元数据,请使用:
#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}
要更新文件夹的元数据值,请使用:
#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
文档库中所有文件的更新创建者和修改者
这次,我们更新 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
}
该脚本扫描并更新存储在库中的所有文档的元数据,包括所有文件夹中的文件。
