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

【FAQ】Script导出SharePoint 目录文件列表并统计大小

一、只导出文件列表的方法

1) 保存脚本(建议名:D:\tmp\Export-SharePoint-FileList.ps1

<# 
导出 SharePoint 指定文件夹(含子文件夹)的文件列表到 CSV(不统计大小)
前提:已安装 PowerShell 7 + PnP.PowerShell;已在 Entra 注册并拿到 ClientId
#># =====[ 需要修改的 3 个参数 ]=====
$SiteUrl = "https://<你的租户>.sharepoint.com/sites/<站点名>"  # 例:https://suniatechnologyinc.sharepoint.com/sites/SuniaDUP2
$ClientId = "<你的ClientID>"                                   # 你们自建的 App Registration 的 Application (client) ID
$FolderSiteRelativeUrl = "Shared Documents/路径/到/目标目录"     # 例:Shared Documents/5 - Projects/2025 - OCR - EDU/1 - Raw Data/1 - Shenzen/OCR_data_collection_china
# 也可以用“文档/...”;以浏览器地址栏显示为准,注意把 %20 换成空格# =====[ 连接站点 ]=====
Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Interactive# =====[ 导出 ]=====
$exportDir = "D:\tmp"
if (-not (Test-Path $exportDir)) { New-Item -ItemType Directory -Path $exportDir | Out-Null }
$outCsv = Join-Path $exportDir ("SharePoint_FileList_{0}.csv" -f (Get-Date -Format "yyyyMMdd_HHmmss"))# 递归获取文件(不取大小,避免各种字段/阈值问题)
$files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeUrl -Recursive |Where-Object { $_.ItemType -eq "File" } |Select-Object Name, ServerRelativeUrl, TimeLastModified$files | Export-Csv $outCsv -NoTypeInformation -Encoding UTF8
Write-Host "文件清单已导出: $outCsv" -ForegroundColor Cyan

提示:$FolderSiteRelativeUrl 必须是站点相对路径(不带 /sites/... 前缀)。从浏览器地址栏复制 /sites/<站点名>/... 后,去掉前面的 /sites/<站点名>/ 即可;把 %20 改成空格。


2) 运行脚本

# 第一次运行脚本需要(当前用户范围即可)
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned# 执行
pwsh -File "D:\tmp\Export-SharePoint-FileList.ps1"
# 或者在 PowerShell 7 里:
# cd D:\tmp
# .\Export-SharePoint-FileList.ps1

3) 常见问题(只针对“导出列表”场景)

  • 结果为空或报错 “Not well formatted JSON stream”
    先重新 Connect-PnPOnline,再运行;网络不稳也会触发,重试即可。

  • 报 5000 阈值
    仅导出名称/路径一般很少触发。如果依然触发,说明目录极大:

    • 先在网页里确认是否可以进一步细分子目录;
    • 分多次填不同的 $FolderSiteRelativeUrl 跑即可。
  • 路径不对
    把浏览器里 /sites/<站点名>/ 后面的部分(Shared Documents/...文档/...)原样粘贴到 $FolderSiteRelativeUrl

  • 库名显示为“文档”但路径用哪个?
    地址栏为准:地址如果是 /Shared%20Documents/... 就写 Shared Documents/...;如果是 /文档/... 就写 文档/...


如果你之后还需要对比本地与云端差异,我可以在这个脚本基础上增加一个“比对本地目录文件名 & 路径”的步骤;但你现在只要列表,这个版本最稳、最省事。

二、导出文件列表并统计大小的方法

Q1:为什么要用 PowerShell 而不是直接在网页导出?

  • 网页端导出 Excel 功能对文档库视图有 5000 项限制,大目录经常超限

  • PowerShell 可以直接通过 SharePoint API 分页拉取,不受单页限制

  • 可一次性导出:

    • 文件名
    • 文件路径
    • 文件大小(MB)
    • 最后修改时间
    • 目录总大小

Q2:准备工作

  1. 安装 PowerShell 7(64 位版)
    下载地址
    选择 PowerShell-<版本>-win-x64.msi 安装

  2. 安装 PnP.PowerShell 模块

    Install-Module -Name PnP.PowerShell -Force -AllowClobber
    
  3. Azure Entra ID 全局管理员注册一个 App(一次性操作):

    • 名称随意(例如 PnP.PowerShell

    • 重定向 URI 选 http://localhost

    • 分配 Microsoft Graph API 权限:

      • Sites.Read.All
      • Sites.ReadWrite.All
    • 点击“Grant admin consent”授权

    • 复制 Application (client) ID(后续连接用)


Q3:执行脚本

  1. 连接到 SharePoint 站点

    Connect-PnPOnline -Url "https://<租户名>.sharepoint.com/sites/<站点名>" `-ClientId "<你的ClientID>" `-Interactive
    
  2. 设置目标目录路径(Server Relative URL)

    • 必须以 /sites/... 开头

    • 例如:

      /sites/SuniaDUP2/Shared Documents/5 - Projects/2025 - OCR - EDU/1 - Raw Data/1 - Shenzen/OCR_data_collection_china
      
  3. 运行导出脚本(输出到 D:\tmp):

    $folderServerRelativeUrl = "/sites/SuniaDUP2/Shared Documents/5 - Projects/2025 - OCR - EDU/1 - Raw Data/1 - Shenzen/OCR_data_collection_china"
    $exportDir = "D:\tmp"
    if (-not (Test-Path $exportDir)) { New-Item -ItemType Directory -Path $exportDir | Out-Null }
    $outCsv = Join-Path $exportDir ("SharePoint_FileList_{0}.csv" -f (Get-Date -Format "yyyyMMdd_HHmmss"))$items = Get-PnPListItem -List "Documents" -PageSize 2000 `-FolderServerRelativeUrl $folderServerRelativeUrl `-Fields "FileLeafRef","FileRef","File_x0020_Size","Modified"$files = $items | Where-Object { $_.FileSystemObjectType -eq "File" } |Select-Object `@{Name="Name";      Expression={ $_.FieldValues["FileLeafRef"] }},@{Name="Path";      Expression={ $_.FieldValues["FileRef"] }},@{Name="SizeBytes"; Expression={ [int64]$_.FieldValues["File_x0020_Size"] }},@{Name="SizeMB";    Expression={ "{0:N2}" -f ( [double]$_.FieldValues["File_x0020_Size"] / 1MB ) }},@{Name="Modified";  Expression={ $_.FieldValues["Modified"] }}$files | Export-Csv $outCsv -NoTypeInformation -Encoding UTF8
    Write-Host "文件清单已导出: $outCsv" -ForegroundColor Cyan$totalMB = ($files | Measure-Object -Property SizeBytes -Sum).Sum / 1MB
    Write-Host ("目录总大小: {0:N2} MB" -f $totalMB) -ForegroundColor Green
    

Q4:常见问题

  1. 执行脚本时提示找不到列表

    • 可能是文档库名称不是 "Documents"(中文环境可能显示为“文档”)
      用以下命令查找:

      Get-PnPList | Where-Object { $_.BaseTemplate -eq 101 } | Select-Object Title, RootFolder
      
  2. 报 5000 项阈值错误

    • 目录中文件数过多时,拆分为多个子目录分别导出
    • 或使用 SharePoint “存储指标”查看总大小(见上一份 FAQ)
  3. 导出文件显示大小为 0

    • 检查是否正确获取了 File_x0020_Size 字段
    • 确保 Where-Object { $_.FileSystemObjectType -eq "File" } 过滤掉了文件夹

Q5:对比“存储指标”方法

方法适合场景优点缺点
存储指标(Web)只看目录大小不下文件、不受5000限制无法导出文件清单
PowerShell 脚本导出文件列表+大小可做对比分析大目录可能要分批跑

http://www.dtcms.com/a/317591.html

相关文章:

  • SQL167 SQL类别高难度试卷得分的截断平均值
  • Tdesign-React 请求接口 415 问题借助 chatmaster 模型处理记录
  • Solidity 编程进阶
  • docker容器临时文件去除,服务器容量空间
  • leetcode643:子数组最大平均数 I(滑动窗口入门之定长滑动窗口)
  • 上下文工程
  • .Net下载共享文件夹中的文件
  • excel名称管理器显示隐藏
  • Java高频方法总结
  • 排序算法归并排序
  • HarmonyOS应用开发环境搭建以及快速入门介绍
  • OpenAI隆重推出开源大模型:GPT-OSS
  • 面试题:基础的sql命令
  • Java NIO
  • 从 LinkedIn 到 Apache:Kafka 的架构设计与应用场景
  • 【25-cv-08899/08985】Lisa Audit 23张版权画作暴雷,Keith律所双案并发冻结跨境店铺!
  • Numpy科学计算与数据分析:Numpy入门之多平台安装与基础环境配置
  • Python 自动化与 Web 应用开发详细教案
  • 前端全栈修炼手册:从 Vue3 到工程化的进阶之路
  • Ethereum: 深入Hardhat Console, 我们的智能合约瑞士军刀
  • 微型导轨:智能家居抽屉的智能化应用
  • Text2SQL 智能问答系统开发-spider验证集(三)
  • 线程互斥与同步
  • C语言控制语句练习题1
  • 汽车以太网通信协议——SOME/IP
  • JTAG-SVF文件完整教程
  • 身份证实名认证接口增强联网平台的便利性与安全性
  • Centos上安装Mysql5.7教程
  • 智能提示词引擎的革新与应用:PromptPilot使用全解析
  • Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞