如何让PowerShell脚本对TXT中每个SharePoint Online站点运行
核心调整说明
针对原单站点脚本的批量适配改动:
- 移除硬编码的单站点配置,改为从TXT文件读取全量待遍历站点地址
- 补全原脚本缺失的分页取数逻辑,避免大文件库因未设置分页导致取数不全
- 增加单站点异常捕获机制,单个站点连接/取数失败不会中断全量批处理流程
- 所有站点导出结果统一汇总到单个CSV文件,新增站点标识列区分数据归属
- 每个站点处理完成后自动断开PnP连接,避免会话缓存导致的跨站点访问错误
前置准备
- 按每行一个站点地址的格式,将待处理站点列表保存为TXT文件,样例格式:
https://mysite.sharepoint.com/sites/site1
https://mysite.sharepoint.com/sites/site2
https://mysite.sharepoint.com/sites/site3
- 本地需安装最新稳定版PnP PowerShell模块
- 提前创建C:\Temp目录,避免脚本读写路径不存在报错
完整可运行脚本
# 全局参数配置 $SiteListPath = "C:\Temp\sites.txt" # 存储站点列表的TXT文件路径 $LibraryName = "Documents" # 要导出的文档库名称 $ReportOutput = "C:\Temp\SPO_DocLib_AllSites_Export.csv" # 汇总导出文件路径 $PageSize = 500 # 分页取数大小 # 初始化清空旧的导出文件 If (Test-Path $ReportOutput) { Remove-Item $ReportOutput -Force } # 读取全量站点列表,过滤空行 $AllSites = Get-Content $SiteListPath | Where-Object { $_.Trim() -ne "" } # 遍历每个站点执行导出 foreach ($SiteURL in $AllSites) { $SiteURL = $SiteURL.Trim() Write-Host "正在处理站点: $SiteURL" -ForegroundColor Cyan try { # 连接到当前SharePoint站点 Connect-PnPOnline -Url $SiteURL -UseWebLogin -ErrorAction Stop # 分页获取文档库所有条目 $ListItems = Get-PnPListItem -List $LibraryName ` -Fields "FileLeafRef", "SMTotalFileStreamSize", "FileDirRef", "Author", "Created", "File_x0020_Type", "FileRef", "Editor" ` -PageSize $PageSize -Paging -ErrorAction Stop # 过滤文件类型的条目,排除文件夹 $SiteResult = foreach ($Item in $ListItems) { If ($Item.FileSystemObjectType -eq "File") { [PSCustomObject][ordered]@{ SiteURL = $SiteURL FileName = $Item["FileLeafRef"] FileType = $Item["File_x0020_Type"] RootFolder = $Item["FileDirRef"] RelativeURL = $Item["FileRef"] FileSizeKB = [math]::Round($Item["SMTotalFileStreamSize"]/1KB, 2) CreatedBy = $Item["Author"].Email CreatedOn = $Item["Created"] ModifiedOn = $Item["Modified"] ModifiedByEmail = $Item["Editor"].Email } } } # 将当前站点结果追加写入汇总CSV $SiteResult | Export-Csv -Path $ReportOutput -NoTypeInformation -Append -Encoding UTF8 Write-Host "站点 $SiteURL 处理完成,共导出 $($SiteResult.Count) 个文件信息" -ForegroundColor Green } catch { Write-Host "站点 $SiteURL 处理失败: $($_.Exception.Message)" -ForegroundColor Red } finally { # 强制断开当前站点连接 Disconnect-PnPOnline -ErrorAction SilentlyContinue } } Write-Host "全量站点处理完成,导出文件路径: $ReportOutput" -ForegroundColor Yellow
运行注意事项
- 运行前需确保当前账号对所有遍历站点有文档库读取权限,无权限的站点会自动跳过并输出错误提示
- 脚本自动将原脚本的字节级文件大小转换为KB单位,可根据实际需求调整为MB等其他单位
- 分页取数逻辑可自动绕过SharePoint Online 5000项列表视图阈值限制,适配大体积文档库
- 导出CSV采用UTF8编码,可避免中文文件名、路径乱码问题
内容的提问来源于stack exchange,提问作者user3360847
相关产品推荐
相关产品推荐

