You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用PowerShell获取SharePoint站点文档文件夹失败,仅得.dll文件

解决PowerShell获取SharePoint站点文档文件夹的问题

问题根源

你当前脚本里的Get-ChildItem是Windows本地文件系统命令,和SharePoint Online完全无关,所以它只会返回当前PowerShell工作目录下的本地文件(也就是你看到的.dll文件),根本不会访问SharePoint站点内容。

修正后的解决方案

要获取SharePoint站点里的文档和文件夹,需要使用SharePoint Online专属的PowerShell命令,以下是基于官方Microsoft.Online.SharePoint.PowerShell模块的实现:

步骤1:确保模块已安装

如果还没安装,先执行:

Install-Module -Name Microsoft.Online.SharePoint.PowerShell -Force -AllowClobber

步骤2:完整脚本示例

# 连接SharePoint管理员中心
Connect-SPOService -url https://mycompany-admin.sharepoint.us

# 获取所有站点(加上-Limit All确保返回全部,默认仅返回200个)
$sites = Get-SPOSite -Limit All

foreach ($site in $sites) {
    Write-Host "===== 正在处理站点: $($site.Url) =====" -ForegroundColor Cyan
    
    # 筛选当前站点内的非隐藏文档库(排除系统默认的隐藏库)
    $documentLibraries = Get-SPOList -Site $site.Url | Where-Object { 
        $_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $false
    }

    foreach ($lib in $documentLibraries) {
        Write-Host "--- 处理文档库: $($lib.Title) ---" -ForegroundColor Green
        
        # 获取文档库内所有项目(文件夹+文件),-Limit All确保返回全部
        $items = Get-SPOListItem -List $lib -Site $site.Url -Limit All

        foreach ($item in $items) {
            # 区分文件夹和文件
            if ($item.FileSystemObjectType -eq "Folder") {
                Write-Host "  文件夹路径: $($item.FieldValues.FileRef)"
            } else {
                Write-Host "  文件路径: $($item.FieldValues.FileRef) | 大小: $($item.FieldValues.File_x0020_Size)字节"
            }
        }
    }
}

关键说明

  • Get-SPOSite -Limit All:必须加上这个参数,否则默认只返回前200个站点
  • Get-SPOList的筛选条件:只获取BaseType为DocumentLibrary的列表,同时排除隐藏的系统库(比如表单模板库等)
  • FileSystemObjectType:用来判断当前项目是文件夹还是文件,FileRef是SharePoint内的服务器相对路径,File_x0020_Size是文件的字节大小

更高效的替代方案(PnP PowerShell)

如果需要处理大量站点或文件,推荐使用PnP PowerShell模块,它支持递归获取子文件夹、分页加载等更实用的功能:

步骤1:安装PnP模块

Install-Module -Name PnP.PowerShell -Force -AllowClobber

步骤2:PnP脚本示例

# 连接管理员中心
Connect-PnPOnline -Url https://mycompany-admin.sharepoint.us -Interactive

# 获取所有站点(包含OneDrive站点)
$sites = Get-PnPTenantSite -IncludeOneDriveSites -Limit All

foreach ($site in $sites) {
    Write-Host "===== 正在处理站点: $($site.Url) =====" -ForegroundColor Cyan
    
    # 切换到当前站点的上下文
    Connect-PnPOnline -Url $site.Url -Interactive

    # 筛选非隐藏文档库
    $documentLibraries = Get-PnPList | Where-Object { 
        $_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $false
    }

    foreach ($lib in $documentLibraries) {
        Write-Host "--- 处理文档库: $($lib.Title) ---" -ForegroundColor Green
        
        # 递归获取所有子文件夹和文件,分页加载避免超时
        $items = Get-PnPListItem -List $lib -PageSize 500 -ScriptBlock { Param($items) $items } -Recursive

        foreach ($item in $items) {
            if ($item.FileSystemObjectType -eq "Folder") {
                Write-Host "  文件夹路径: $($item.FieldValues.FileRef)"
            } else {
                Write-Host "  文件路径: $($item.FieldValues.FileRef) | 大小: $($item.FieldValues.File_x0020_Size)字节"
            }
        }
    }
}

注意事项

  • 权限要求:你的账号需要拥有SharePoint管理员或全局管理员权限,才能访问所有站点和文档库
  • 性能优化:如果站点数量多、文件量大,建议将输出内容写入日志文件(比如使用Out-File或Add-Content),避免控制台输出卡顿
  • 自定义筛选:可以根据需求添加站点过滤条件(比如Where-Object { $_.Url -notlike "*my.sharepoint.us/personal*" }排除OneDrive站点)或文件类型过滤

内容的提问来源于stack exchange,提问作者ppayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:11:06