【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.pswp.cn/web/92232.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Thinking in Java》读书笔记---控制执行流程

就像有感知的生物一样&#xff0c;程序必须在执行过程中控制它的世界&#xff0c;并做出选择。在Java中&#xff0c;你要使用执行控制语句来作出选择。一、流程控制基础概念1.1 流程控制的重要性流程控制结构决定了程序执行的顺序和逻辑分支&#xff0c;是编程语言中最基础也是…

极验 G-star 人才特训营:为业务安全领域培养下一代新兴力量

本文导读 极验为什么要启动 G-star 实习生培养计划&#xff1f;50多位来自多所高校的同学&#xff0c;在极验经历了一场怎样的“非典型”实习&#xff1f;技术大咖亲授&#xff0c;先培训再实战&#xff0c;极验打造的是怎样的人才体系&#xff1f;同学有话说&#xff1a;培养计…

攻防世界-web-csaw-mfw

一.题目分析这边提示使用了Git&#xff0c;试着访问.git看是否存在.git泄露浏览了一下&#xff0c;很多都是乱码&#xff0c;想着用githack将git库克隆下看一下二.操作python2 GitHack.py http://url/.git访问了一下flag.php&#xff0c;没啥发现&#xff0c;在看一下index.php…

202506 电子学会青少年等级考试机器人四级实际操作真题

更多内容和历年真题请查看网站&#xff1a;【试卷中心 -----> 电子学会 ----> 机器人技术 ----> 四级】 网站链接 青少年软件编程历年真题模拟题实时更新 2025年6月 青少年等级考试机器人实操真题四级 实际操作 主题&#xff1a;感应节能灯&#xff08;四级&am…

DLT645电表数据 保存到MySQL数据库项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 配置VFBOX网关采集DLT645电表数据 5 网关写数据到MYSQL数据库 6 安装MYSQL数据库 7 其他说明 8 案例总结 1 案例说明 设置网关采集DLT645电表数据数据把采集的数据保存到MySQL数据库。 2 VFBOX网关工作原理 VFBOX网关…

Redux与React - 异步状态操作(React快速上手4)

异步操作样板代码1. 创建store的写法保持不变&#xff0c;配置好同步修改状态的方法 2. 单独封装一个函数&#xff0c;在函数内部return一个新函数&#xff0c;在新函数中 2.1 封装异步请求获取数据 2.2 调用同步actionCreater传入异步数据生成一个action对象&#xff0c;并使用…

win10桌面右键没有新建word

win10右键新建word不见解决方法1、点击开始&#xff0c;找到运行命令行&#xff0c;输入regedit&#xff0c;打开注册表。2、在左侧找到HKEY_CLASSES_ROOT目录&#xff0c;并展开。3.找到.docx 双击&#xff08;默认&#xff09;一项&#xff0c;将其改为 Word.Document.12。关…

Docker国内可用镜像(2025.08.06测试)

Docker渡渡鸟镜像可用&#xff08;测试时间2025.08.06&#xff09;https://docker.aityp.com/使用渡渡鸟镜像pull ollama latest 例子&#xff1a;docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ollama/ollama:0.10.1毫秒镜像和轩辕镜像也可用&#xff0c;但…

决策树的实际案例

决策树作为一种直观、易解释的机器学习算法&#xff0c;在金融、医疗、电商、风控等多个领域都有广泛的实际应用。以下将讲解1个典型案例&#xff1a;贷款违约预测。对于贷款违约预测&#xff0c;即在贷款人员在贷款之前对其进行预测&#xff0c;通过他的众多特征情况判别是否可…

bool 类型转换运算符重载

以下是一个极简且聚焦核心知识点的示例代码&#xff0c;用最直观的方式演示 bool 类型转换运算符重载的触发逻辑、使用场景和避坑点&#xff0c;帮你快速掌握&#xff1a;cpp运行#include <iostream> using namespace std;// 核心类&#xff1a;演示 bool 转换运算符 cla…

LVGL代码框架简介

LVGL代码框架介绍LVGL&#xff08;Light and Versatile Graphics Library&#xff09;是一个轻量级、功能强大的嵌入式图形库。其代码架构设计清晰&#xff0c;模块化程度高。1. 整体架构层次LVGL采用分层架构设计&#xff0c;主要包含以下几个层次&#xff1a;┌───────…

【云计算】云主机的亲和性策略(三):云主机 宿主机

《云主机的亲和性策略》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 云主机的亲和性策略&#xff08;一&#xff09;&#xff1a;快乐旅行团2️⃣ 云主机的亲和性策略&#xff08;二&#xff09;&#xff1a;集群节点组3️⃣ 云主机的亲和性策略&#xff08;三&#xf…

【世纪龙科技】虚拟技术助力职教汽车自动变速器拆装虚拟实训软件

在职业院校汽车专业实训课堂上&#xff0c;教师常面临这样的两难&#xff1a;学生围在昂贵的自动变速器实物旁&#xff0c;却因设备数量有限只能轮流操作&#xff1b;拆装步骤稍有偏差便可能损坏精密部件&#xff0c;维修成本让本就紧张的教学经费雪上加霜&#xff1b;传统教学…

[LVGL] 配置lv_conf.h | 条件编译 | 显示屏lv_display

链接&#xff1a;https://docs.lvgl.io/master/ docs&#xff1a;LVGL LVGL&#xff08;Light and Versatile Graphics Library&#xff09;是用于在资源受限的嵌入式系统上创建图形用户界面&#xff08;GUI&#xff09;的开源解决方案。 它提供丰富的控件和灵活的**事件系…

sqli-labs通关笔记-第32关 GET宽字符注入(单引号闭合 手工注入+脚本注入两种方法)

目录 一、宽字符注入 二、代码审计 1、代码审计 2、SQL注入安全性分析 三、渗透实战 1、进入靶场 2、id1探测 3、id%df-- 探测 4、手工注入 &#xff08;1&#xff09;获取列数 &#xff08;2&#xff09;获取回显位 &#xff08;3&#xff09;获取数据库名 &…

MySQL的创建管理表:

目录 基础知识&#xff1a; 一条数据存储的过程&#xff1a; 标识符命名规则&#xff1a; 创建和管理数据库&#xff1a; 创建数据库&#xff1a; 创建数据库&#xff1a; 创建数据库并指定字符集&#xff1a; 判断数据库是否存在&#xff0c;不存在则创建数据库&#…

Linux Vi常用指令总结

Vi&#xff08;及其改进版 Vim&#xff09;是 Linux 中常用的文本编辑器&#xff0c;虽然入门有一定门槛&#xff0c;但熟练掌握后效率极高。以下是常见指令分类整理&#xff1a;1. 模式切换 普通模式&#xff08;命令模式&#xff09;&#xff1a;启动后的默认模式&#xff0c…

解决远程连接云服务器mysql编号1130问题

连接云服务器mysql失败&#xff0c;可能是因为ip发生改变&#xff0c;被mysql拦截。我自己前后做了两件事。大家赶时间可直接从二开始&#xff0c;不放心的就从一开始到结束一、在云服务器实例中为当前ip配置安全组权限。1.找到当前服务器的实例&#xff0c;进入安全组。为其增…

大数据存储域——HDFS存储系统

摘要本文介绍了HDFS存储系统&#xff0c;包括其组件、工作机制、实战经验总结、使用场景以及与SpringBoot的实战示例和优化设计。HDFS由Client、NameNode、SecondaryNameNode、DataNode等组件构成&#xff0c;通过特定的工作机制实现文件的读取和写入。它适用于多种场景&#x…

jdk动态代理如何实现

口语化答案好的&#xff0c;面试官。jdk 的动态代理主要是依赖Proxy类 和InvocationHandler 接口。jdk 动态代理要求类必须有接口。在进行实现的时候&#xff0c;首先要定义接口&#xff0c;比如MyService&#xff0c;这个接口就是我们的正常功能的实现。但是希望在不更改MySer…