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

如何通过PowerShell登录O365 SharePoint下载指定Excel文件?

使用PowerShell登录O365 SharePoint并下载Excel文件

方法一:用PnP PowerShell模块(最省心)

PnP PowerShell是微软官方针对SharePoint和M365的工具,身份验证和文件操作都做了封装,比原生请求靠谱得多。

操作步骤:

  1. 首次使用先安装模块:
Install-Module -Name PnP.PowerShell -Force -AllowClobber
  1. 连接站点并下载文件:
# 替换成你的SharePoint站点根URL(不是文件直接链接)
$siteUrl = "https://sharepoint.com/sites/Business"
# 文件在站点内的相对路径(从文档库起始)
$fileRelativePath = "Shared Documents/Matt/PowerShell/business.xlsx"
# 本地保存路径
$localSavePath = "C:\Users\admin\Documents\PowerShell\business.xlsx"

# 执行后弹出登录窗口,输入O365账号密码即可
Connect-PnPOnline -Url $siteUrl -Interactive

# 下载文件,-Force参数会覆盖已存在的同名文件
Get-PnPFile -Url $fileRelativePath -AsFile -Path $localSavePath -Force

方法二:用Invoke-WebRequest配合OAuth令牌

如果不想安装模块,可以通过Azure AD应用获取OAuth令牌验证请求,适合自动化脚本场景。

操作步骤:

  1. 先在Azure AD中注册应用,分配Files.Read.All或Sites.Read.All的应用权限(需管理员同意)。
  2. 用以下代码获取令牌并下载:
# 替换为你的Azure AD应用信息
$clientId = "你的客户端ID"
$tenantId = "你的租户ID"
$clientSecret = "你的客户端密钥"

# 替换为对应文件的Graph API路径(需提前获取站点ID和GUID)
$fileGraphUrl = "https://graph.microsoft.com/v1.0/sites/sharepoint.com,{站点ID},{站点GUID}/drive/root:/Shared Documents/Matt/PowerShell/business.xlsx:/content"
$localSavePath = "C:\Users\admin\Documents\PowerShell\business.xlsx"

# 获取访问令牌
$tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$tokenBody = @{
    client_id     = $clientId
    scope         = "https://graph.microsoft.com/.default"
    client_secret = $clientSecret
    grant_type    = "client_credentials"
}
$tokenResponse = Invoke-RestMethod -Uri $tokenEndpoint -Method Post -Body $tokenBody
$accessToken = $tokenResponse.access_token

# 携带令牌下载文件
Invoke-WebRequest -Uri $fileGraphUrl -Headers @{Authorization = "Bearer $accessToken"} -OutFile $localSavePath

提示:站点ID和GUID可通过Get-PnPSite命令或Graph API查询获取。

方法三:模拟浏览器登录(不推荐)

通过抓取登录Cookie验证请求,但O365登录页有动态参数和MFA验证,流程繁琐且易失效,仅适合临时测试:

$fileUrl = "https://sharepoint.com/sites/Business/Shared%20Documents/Matt/PowerShell/business.xlsx"
$localSavePath = "C:\Users\admin\Documents\PowerShell\business.xlsx"

$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$loginPage = Invoke-WebRequest -Uri $fileUrl -WebSession $session

# 手动填写登录表单,实际场景还需处理密码页、MFA等,代码会非常复杂
$loginForm = $loginPage.Forms[0]
$loginForm.Fields["loginfmt"] = "你的O365账号"
$response = Invoke-WebRequest -Uri $loginForm.Action -Method Post -WebSession $session -Body $loginForm.Fields

# 后续MFA及动态参数处理步骤省略,脚本稳定性极低

总结

优先选择方法一,PnP模块一键搞定,无需折腾身份验证细节;若需无人值守脚本,方法二的OAuth方式更稳定,但需提前配置Azure AD应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:22:06