如何使用PowerShell向SharePoint Online中心站点上传文件
1. 检查应用权限配置是否完整
你遇到的权限报错90%以上是应用权限配置遗漏导致,按注册方式排查:
- 如果你是通过SharePoint原生应用注册页(
/_layouts/15/appregnew.aspx)注册的应用:- 进入站点的
/_layouts/15/appinv.aspx页,输入你的ClientId查询应用 - 在权限请求XML框填入以下内容,确保开启应用仅策略,配置对应写入权限:
<AppPermissionRequests AllowAppOnlyPolicy="true"> <!-- 仅当前站点集权限 --> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Write" /> <!-- 如需全租户权限替换为下面这行 --> <!-- <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" /> --> </AppPermissionRequests>- 点击创建后必须点「信任」按钮完成授权,未完成信任操作权限不会生效。
- 进入站点的
- 如果你是通过Azure AD注册的应用:
- 进入Azure AD应用注册页,找到你的应用,打开「API权限」页
- 添加SharePoint的应用权限(不要选委托权限),至少配置
Sites.ReadWrite.All权限 - 必须点击「授予管理员同意」按钮完成全局授权,未同意的权限不会生效。
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
相关产品推荐
相关产品推荐

