You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:42:43