SharePoint Online:用PnP PowerShell发布页面且保留原Modified By属性
方案1:发布页面时保留原Modified By属性(使用SystemUpdate)
通过-SystemUpdate参数可在修改页面后强制保留原修改人及修改时间,即使执行发布操作也不会覆盖这些系统字段。具体步骤及代码如下:
# 连接目标SharePoint站点 Connect-PnPOnline -Url "https://你的租户.sharepoint.com/sites/你的站点" -Interactive # 获取所有已发布的新闻帖子(Site Pages库中PromotedState=2表示新闻) $newsPages = Get-PnPListItem -List "Site Pages" -Query "<View><Query><Where><Eq><FieldRef Name='PromotedState'/><Value Type='Integer'>2</Value></Eq></Where></Query></View>" foreach($pageItem in $newsPages){ # 获取页面文件及原修改信息 $pageFile = $pageItem.File $originalEditorId = $pageItem["Editor"].LookupId $originalModifiedTime = $pageItem["Modified"] # 执行页面内容修改(示例:更新页面标题) $page = Get-PnPClientSidePage -Identity $pageFile.Name $page.Title = "更新后的新闻标题" $page.Save() # 恢复原修改人及修改时间,使用SystemUpdate避免修改系统字段 Set-PnPListItem -List "Site Pages" -Identity $pageItem.Id -Values @{ Editor = $originalEditorId Modified = $originalModifiedTime } -SystemUpdate # 发布页面 Publish-PnPFile -FileUrl $pageFile.ServerRelativeUrl # 发布后再次恢复原修改信息(发布操作可能触发系统字段更新) Set-PnPListItem -List "Site Pages" -Identity $pageItem.Id -Values @{ Editor = $originalEditorId Modified = $originalModifiedTime } -SystemUpdate Invoke-PnPQuery }
关键说明
-SystemUpdate参数会跳过对Created、Created By、Modified、Modified By等系统字段的更新,仅保存指定的字段修改。- 发布后需再次执行恢复操作,因为
Publish-PnPFile会触发版本记录,可能临时修改Modified By字段。
方案2:更新页面属性无需重新发布页面
如果仅修改页面的元数据属性(如自定义字段、标题、描述等),而非页面的可视化内容(如Web部件、正文),则无需发布页面,直接通过列表项修改即可保留原修改人:
# 连接目标SharePoint站点 Connect-PnPOnline -Url "https://你的租户.sharepoint.com/sites/你的站点" -Interactive # 获取所有已发布的新闻帖子 $newsPages = Get-PnPListItem -List "Site Pages" -Query "<View><Query><Where><Eq><FieldRef Name='PromotedState'/><Value Type='Integer'>2</Value></Eq></Where></Query></View>" foreach($pageItem in $newsPages){ # 记录原修改信息 $originalEditorId = $pageItem["Editor"].LookupId $originalModifiedTime = $pageItem["Modified"] # 修改页面属性(示例:更新自定义字段值) Set-PnPListItem -List "Site Pages" -Identity $pageItem.Id -Values @{ "CustomNewsCategory" = "企业动态" # 替换为你的自定义字段名称 Editor = $originalEditorId Modified = $originalModifiedTime } -SystemUpdate Invoke-PnPQuery }
关键说明
- 仅修改元数据时,页面不会进入草稿状态,因此无需执行发布操作。
- 使用
-SystemUpdate确保修改属性的同时,完全保留原Modified By和Modified时间。
内容的提问来源于stack exchange,提问作者dev123
相关产品推荐
相关产品推荐

