如何用PowerShell从非商业版OneDrive下载公开共享文件?
如何用PowerShell无凭证下载非商业版OneDrive共享文件
问题背景
Dropbox的共享文件可通过替换域名直接生成下载链接,但非商业版OneDrive的短共享链接(如https://1drv.ms/u/s!Bjfhd-pwUc_asdcadfasdfTYFASDFASDf?e=aksdHDG)直接用Invoke-WebRequest下载时,只会得到预览页面的JavaScript代码,无法获取实际文件。核心需求是无需凭证下载“任何人可查看”的文件,因此依赖OAuth2令牌的模块方案不符合要求。
解决方案
OneDrive的短共享链接会跳转到文件预览页面,需从中提取真实下载地址后再执行下载。以下是两种可行实现方式:
方法1:通过重定向头提取下载链接
利用短链接的重定向特性,获取跳转后的预览页面地址,将其中的embed替换为download即可得到直接下载链接:
# 替换为你的OneDrive共享短链接 $sharedUrl = "https://1drv.ms/u/s!Bjfhd-pwUc_asdcadfasdfTYFASDFASDf?e=aksdHDG" # 获取重定向地址 $redirectResponse = Invoke-WebRequest -UseBasicParsing -Uri $sharedUrl -MaximumRedirection 0 -ErrorAction SilentlyContinue # 转换为下载链接 $downloadUrl = $redirectResponse.Headers.Location -replace "embed", "download" # 下载文件到指定路径 Invoke-WebRequest -UseBasicParsing -Uri $downloadUrl -OutFile "C:\MyFile.txt"
方法2:解析预览页面提取下载按钮链接
如果重定向方法失效,可直接抓取预览页面内容,提取页面中“下载”按钮对应的链接:
$sharedUrl = "https://1drv.ms/u/s!Bjfhd-pwUc_asdcadfasdfTYFASDFASDf?e=aksdHDG" # 获取预览页面内容 $pageContent = Invoke-WebRequest -UseBasicParsing -Uri $sharedUrl # 提取下载链接 $downloadUrl = $pageContent.Links | Where-Object { $_.outerHTML -match "Download" } | Select-Object -ExpandProperty href -First 1 # 执行下载 Invoke-WebRequest -UseBasicParsing -Uri $downloadUrl -OutFile "C:\MyFile.txt"
注意事项
- 确保共享文件已设置为任何人可查看权限,否则即使获取到下载链接也会因权限不足无法下载。
- 若遇到链接格式变更导致方法失效,可手动打开共享链接,查看浏览器中下载按钮的真实地址,调整脚本中的提取逻辑。
内容的提问来源于stack exchange,提问作者YorSubs
相关产品推荐
相关产品推荐

