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

如何使用PowerShell向SharePoint Online中心站点上传文件

SharePoint应用客户端密钥上传文件Access Denied解决方法

1. 检查应用权限配置是否完整

你遇到的权限报错90%以上是应用权限配置遗漏导致,按注册方式排查:

  • 如果你是通过SharePoint原生应用注册页(/_layouts/15/appregnew.aspx)注册的应用:
    1. 进入站点的/_layouts/15/appinv.aspx页,输入你的ClientId查询应用
    2. 在权限请求XML框填入以下内容,确保开启应用仅策略,配置对应写入权限:
    <AppPermissionRequests AllowAppOnlyPolicy="true">
      <!-- 仅当前站点集权限 -->
      <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Write" />
      <!-- 如需全租户权限替换为下面这行 -->
      <!-- <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" /> -->
    </AppPermissionRequests>
    
    1. 点击创建后必须点「信任」按钮完成授权,未完成信任操作权限不会生效。
  • 如果你是通过Azure AD注册的应用:
    1. 进入Azure AD应用注册页,找到你的应用,打开「API权限」页
    2. 添加SharePoint的应用权限(不要选委托权限),至少配置Sites.ReadWrite.All权限
    3. 必须点击「授予管理员同意」按钮完成全局授权,未同意的权限不会生效。

2. 修正脚本路径与参数

你的脚本参数存在两个常见错误:

  • 目标文件夹路径不要加开头的斜杠,根站点的Shared Documents直接写"Shared Documents"即可,如果是子站点集,写站点相对路径如"/sites/你的站点名/Shared Documents"
  • 确认$SharePointURL与目标站点集地址完全匹配,如果你要上传到子站点集,URL要填写子站点的完整地址,比如https://mydomain.sharepoint.com/sites/xxx
  • $file参数建议填写本地文件的完整绝对路径,避免相对路径识别失败。

修正后可用脚本示例

$SharePointURL = "替换为你的目标站点完整URL"
$SharePointDestPath = "Shared Documents"
$file = "替换为本地文件的完整绝对路径,比如C:\files\test.xlsx"

Connect-PnPOnline -Url $SharePointURL -ClientId "你的ClientId" -ClientSecret "你的ClientSecret" -WarningAction Ignore
Write-Host "连接完成"
Write-Host "正在上传文件 ... " -NoNewline
Add-PnPFile -Path $file -Folder $SharePointDestPath -Verbose
Disconnect-PnPOnline

3. 排查其他异常

  • 检查你使用的ClientSecret是否在有效期内,过期密钥也会触发权限类报错
  • 确认目标文档库没有开启额外的权限限制,应用账号是否被加入库的权限黑名单

内容的提问来源于stack exchange,提问作者Florin Giurgiuman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:03