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

如何让Get-PnPFolder仅获取SharePoint文档库一级文件夹?

解决SharePoint PowerShell脚本仅获取文档库一级文件夹的问题

问题说明

原脚本使用Get-PnPFolder -List $Library会递归返回文档库内所有层级的文件夹(包含嵌套子文件夹),需要调整为仅抓取文档库根目录下的一级主文件夹。

解决方案

要限制仅获取一级文件夹,需放弃直接用Get-PnPFolder -List $Library的方式,改为先定位文档库的根文件夹,再获取该根文件夹的直接子文件夹。具体通过Get-PnPFolder指定根目录,再用Get-PnPFolderItem筛选文件夹类型并限制层级。

修改后的完整脚本

$AdminUrl = "https://***-admin.sharepoint.com/"
Connect-PnPOnline -Url $AdminUrl -Interactive

# 获取所有SharePoint站点集
$SiteColl = Get-PnPTenantSite
$csvOutput = @()

# 遍历所有站点集
ForEach($Site in $SiteColl)
{
    Connect-PnPOnline -Url $Site.Url -Interactive
    $Webs = Get-PnPSubWeb -Recurse -IncludeRootWeb

    # 获取当前网站下的所有文档库
    ForEach($Web in $Webs)
    {
        $DocumentLibraries = Get-PnPList -Web $Web | Where-Object {$_.BaseType -eq "DocumentLibrary" -and $_.Title -ne "Site Assets" -and $_.Hidden -eq $false}
        
        # 遍历每个文档库
        ForEach($Library in $DocumentLibraries)
        {
            # 获取文档库的根文件夹
            $rootFolder = Get-PnPFolder -List $Library -Identity "/"
            # 获取根文件夹下的一级子文件夹(仅直接子级)
            $f = Get-PnPFolderItem -Folder $rootFolder -ItemType Folder

            ForEach($folder in $f)
            {
                Write-Host $Site.Title " --> "  $Library.Title  " --> " $folder.Name " --> " $folder.ServerRelativeUrl
                $csvOutput +=  [PsCustomObject]@{SiteTitle = $Site.Title; LibraryTitle = $Library.Title; Folder = $folder.Name; FolderPath = $folder.ServerRelativeUrl}
            }
        }
    }
}
$csvOutput | Export-Csv -NoTypeInformation -Path "D:\export123.csv"

效果验证

修改后CSV输出将仅保留文档库根目录下的一级文件夹,嵌套子文件夹会被过滤。例如原输出中的/dv/P100/WIP、/tagggg/a1/a2这类条目会被移除,最终输出如下:

NewRoot  -->  dv  -->  test123  -->  /dv/test123
NewRoot  -->  dv  -->  P100  -->  /dv/P100
NewRoot  -->  Site Pages  -->  Templates  -->  /SitePages/Templates
NewRoot  -->  tagggg  -->  a1  -->  /tagggg/a1
NewRoot  -->  testdcdc  -->  test  -->  /testdcdc/test

关键修改点解释

  • 替换原有的$f = Get-PnPFolder -List $Library为两步操作:
    1. Get-PnPFolder -List $Library -Identity "/":精准定位到文档库的根文件夹
    2. Get-PnPFolderItem -Folder $rootFolder -ItemType Folder:仅获取根文件夹下的直接子文件夹,不会递归遍历子层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:40:59