当前位置: 首页 > news >正文

PowerShell 批量下载 SharePoint Online 文档

  前言

  最近接到一个活,批量下载文档,可能有人说,为什么不用OOB的功能,因为太多了,还有多种条件筛选

  正文

  1.先分享PowerShell 命令,如下图:

<#
.SYNOPSIS
PowerShell 7专用 - 批量下载SharePoint Online文档库所有文档
.DESCRIPTION
保留原文件夹结构,支持过滤文件类型,适配MFA登录,兼容大文件下载
#># -------------------------- 可配置变量(按需修改) --------------------------
$siteUrl = "https://linyus.sharepoint.com/sites/Develop"  # SPO站点地址
$libraryName = "Shared Documents"                                     # 要下载的文档库名称(如"文档库""SiteAssets")
$localSavePath = "C:\SPO_Downloads"                              # 本地保存根路径(自动创建)
$filterFileTypes = @("*")                                        # 过滤下载的文件类型(示例:@("docx","pdf","xlsx") 仅下载这三类)
$overwriteExisting = $true                                       # 是否覆盖本地已存在的文件(true=覆盖,false=跳过)# -------------------------- 核心函数:递归下载文件夹+文件 --------------------------
function Download-PnPDocumentLibrary {param([Parameter(Mandatory)][string]$SiteUrl,[Parameter(Mandatory)][string]$LibraryName,[Parameter(Mandatory)][string]$LocalRootPath,[array]$FilterFileTypes = @("*"),[bool]$Overwrite = $true,[string]$FolderServerRelativeUrl = $null)# 初始化参数if (-not $FolderServerRelativeUrl) {# 获取文档库的服务器相对路径(首次执行)$library = Get-PnPList -Identity $LibraryName -Includes RootFolder$FolderServerRelativeUrl = $library.RootFolder.ServerRelativeUrlWrite-Host "📂 文档库根路径: $FolderServerRelativeUrl" -ForegroundColor Cyan}# 创建本地对应文件夹$localFolderPath = $LocalRootPath + $FolderServerRelativeUrl.Replace("/", "\")if (-not (Test-Path $localFolderPath)) {New-Item -ItemType Directory -Path $localFolderPath -Force | Out-NullWrite-Host "✅ 创建本地文件夹: $localFolderPath" -ForegroundColor Green}# 1. 获取当前文件夹下的文件$files = Get-PnPFileInFolder -Identity "Shared Documents" # -FolderSiteRelativeUrl $FolderServerRelativeUrl -ErrorAction SilentlyContinueforeach ($file in $files) {# 过滤文件类型$fileExt = $file.Name.Split(".")[-1].ToLower()if ($FilterFileTypes -ne "*" -and $fileExt -notin $FilterFileTypes) {Write-Host "ℹ️ 跳过非目标类型文件: $($file.Name)" -ForegroundColor Yellowcontinue}# 拼接本地文件路径$localFilePath = Join-Path -Path $localFolderPath -ChildPath $file.Name# 跳过已存在的文件(若不覆盖)if (-not $Overwrite -and (Test-Path $localFilePath)) {Write-Host "ℹ️ 本地已存在,跳过: $($file.Name)" -ForegroundColor Yellowcontinue}# 下载文件try {Write-Host "⬇️ 正在下载: $($file.Name)" -ForegroundColor CyanGet-PnPFile -Url $file.ServerRelativeUrl -Path $localFolderPath -FileName $file.Name -AsFile -Force:$Overwrite -ErrorAction StopWrite-Host "✅ 下载完成: $localFilePath" -ForegroundColor Green}catch {Write-Host "❌ 下载失败: $($file.Name) - $($_.Exception.Message)" -ForegroundColor Red}}# 2. 递归下载子文件夹$subFolders = Get-PnPFolder -Url $FolderServerRelativeUrl -Includes Folders | Select-Object -ExpandProperty Foldersforeach ($folder in $subFolders) {if ($folder.Name -notin @("Forms", "_cts")) {  # 跳过系统文件夹Write-Host "📁 进入子文件夹: $($folder.ServerRelativeUrl)" -ForegroundColor BlueDownload-PnPDocumentLibrary -SiteUrl $SiteUrl -LibraryName $LibraryName -LocalRootPath $LocalRootPath `-FilterFileTypes $FilterFileTypes -Overwrite $Overwrite -FolderServerRelativeUrl $folder.ServerRelativeUrl}}
}# -------------------------- 执行入口 --------------------------
# 1. 检查并安装PnP.PowerShell
if (-not (Get-Module -ListAvailable -Name PnP.PowerShell)) {Write-Host "🔧 正在安装PnP.PowerShell模块..." -ForegroundColor CyanSet-PSRepository -Name PSGallery -InstallationPolicy Trusted -ErrorAction SilentlyContinueInstall-Module -Name PnP.PowerShell -Force -AllowClobber -Scope CurrentUser -ErrorAction Stop
}
Import-Module PnP.PowerShell -DisableNameChecking -Force -ErrorAction Stop
Write-Host "✅ PnP.PowerShell模块加载成功`n" -ForegroundColor Green# 2. 连接SPO站点
try {Write-Host "🔗 正在连接站点: $siteUrl" -ForegroundColor CyanConnect-PnPOnline -Url $siteUrl -UseWebLogin -ErrorAction StopWrite-Host "✅ 站点连接成功`n" -ForegroundColor Green# 3. 检查文档库是否存在$library = Get-PnPList -Identity $libraryName -ErrorAction SilentlyContinueif (-not $library) {throw "文档库 '$libraryName' 不存在,请检查名称是否正确"}# 4. 创建本地保存根路径if (-not (Test-Path $localSavePath)) {New-Item -ItemType Directory -Path $localSavePath -Force | Out-NullWrite-Host "📂 已创建本地保存路径: $localSavePath`n" -ForegroundColor Cyan}# 5. 开始批量下载Write-Host "🚀 开始批量下载文档库 '$libraryName' 的文件..." -ForegroundColor GreenDownload-PnPDocumentLibrary -SiteUrl $siteUrl -LibraryName $libraryName -LocalRootPath $localSavePath `-FilterFileTypes $filterFileTypes -Overwrite $overwriteExistingWrite-Host "`n🎉 下载完成!所有文件已保存到: $localSavePath" -ForegroundColor Green
}
catch {Write-Host "`n❌ 执行出错: $($_.Exception.Message)" -ForegroundColor Redexit 1
}
finally {# 断开连接if (Get-PnPConnection) {Disconnect-PnPOnline -ErrorAction SilentlyContinueWrite-Host "`n🔌 已断开SPO站点连接" -ForegroundColor Cyan}
}

  2.然后是执行成功的截图,如下图:

image

  3.再然后是下载成功的目录,如下图:

image

  结束语

  虽然用PowerShell,但是下载还是一个很漫长的过程

http://www.jsqmd.com/news/425522/

相关文章:

  • 论文写作利器:16个AI网站推荐与技巧
  • 16款AI论文写作网站推荐,附操作指南
  • 16个AI工具助力毕业论文,附实用方法
  • K8S负载均衡原理详解 - 智慧园区
  • 提示系统从崩溃到稳定:架构师的30天服务治理改造记
  • 北京GEO服务商怎么挑?2026年AI获客实战指南 - 品牌2025
  • Java编译报码8273代码解决的思路
  • 北京GEO服务商哪家强?2026年AI获客能力全景透视 - 品牌2025
  • 基于springboot框架的交通事故档案管理平台的设计与实现_o63l5u1o
  • 基于springboot框架的大学生健康管理系统_35l867i9
  • Dora视觉集成系统
  • 2026年琼海人气海鲜店推荐,抢先体验最值得的琼海海鲜大餐排行榜
  • Gaia 与 ARE:赋能社区的智能体评测
  • 提示工程架构师:解决prompt效率低下的5个创新实践技巧
  • HuggingFace
  • 讲讲 Redis 集群为什么只有 0 号数据库?
  • LLMs之Agent之Code:everything-claude-code的简介、安装和使用方法、案例应用之详细攻略
  • 6.6 Dify低代码平台搭建LLM应用完整实战教程
  • LCT 相关
  • HDFS的缺点与不适用场景
  • 北京豆包推广公司:如何选择合规、专业的GEO服务商? - 品牌2025
  • 你的 try-catch 没有在处理错误,它在藏错误
  • 远程连接工具 XPipe
  • 基于峰值电流闭环Buck电路仿真设计及建模Matlab代码
  • 豆包推广:没有广告入口,如何实现品牌有效曝光? - 品牌2025
  • 2026年贝雷桥厂家推荐,轻量化高强度装配式钢桥厂家 - 品牌鉴赏师
  • 基于电励磁同步电机的启动+运行+能耗制动三阶段过程Matlab仿真
  • 12306bypass电脑版
  • PowerShell 清空 SharePoint Online 列表数据
  • 盘点16个毕业论文AI写作工具,附带实用技巧