使用Add-PnPFile无法更新SharePoint上传文件的Modified属性求助
问题原因
SharePoint的Modified、Created这类系统内置字段属于平台自动维护的受控字段,常规的字段更新操作(包括Add-PnPFile的-Values参数、不带特殊参数的Set-PnPListItem调用)会被SharePoint拦截忽略——这是平台的默认保护机制,目的是确保系统元数据的准确性。而自定义字段没有这类保护,所以你能正常设置。
解决方法
要修改这类系统字段,必须使用支持系统级更新的方法,同时需要对应权限,以下是两种可行方案:
方案1:用Set-PnPListItem搭配-SystemUpdate参数
该参数会绕过SharePoint的常规字段验证,允许修改系统内置字段,且不会生成新版本、触发工作流或事件接收器。
# 1. 上传文件到目标文档库 $uploadedFile = Add-PnPFile -Path "C:\test\sample.pdf" -Folder "Documents" # 2. 获取文件对应的列表项ID $listItemId = $uploadedFile.ListItemAllFields.Id # 3. 设置Modified(及可选的Created、修改人)字段并执行系统更新 Set-PnPListItem -List "Documents" -Identity $listItemId -Values @{ Modified = [datetime]"2025-01-01" Created = [datetime]"2025-01-01" # 如需同步修改创建时间可添加 Editor = (Get-PnPUser -Email "user@contoso.com").Id # 如需修改修改人,可指定用户ID } -SystemUpdate
方案2:用CSOM的UpdateOverwriteVersion方法(保留版本场景)
如果需要修改系统字段同时保留文件版本记录,可以直接调用底层CSOM对象的UpdateOverwriteVersion方法:
# 1. 上传文件 $uploadedFile = Add-PnPFile -Path "C:\test\sample.pdf" -Folder "Documents" $listItem = $uploadedFile.ListItemAllFields # 2. 赋值系统字段 $listItem["Modified"] = [datetime]"2025-01-01" $listItem["Created"] = [datetime]"2025-01-01" # 如需修改修改人,可指定用户ID # $listItem["Editor"] = 10 # 替换为目标用户的实际ID # 3. 执行更新并提交变更 $listItem.UpdateOverwriteVersion() Invoke-PnPQuery
关键注意事项
- 权限要求:必须拥有网站集管理员权限,或被授予列表级的「覆盖列表项创建者和修改者」权限(在列表权限设置的高级选项中配置),否则操作会失败。
- 字段内部名称:务必使用字段的内部名称(如
Modified、Created、Editor),不要用显示名称,避免匹配错误。 - 日期格式:优先使用标准DateTime对象(如
[datetime]"2025-01-01"),避免因区域格式差异导致的日期解析错误。
内容的提问来源于stack exchange,提问作者Olivier Gouret
相关产品推荐
相关产品推荐

