如何让Get-PnPFolder仅获取SharePoint文档库一级文件夹?
问题说明
原脚本使用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为两步操作:Get-PnPFolder -List $Library -Identity "/":精准定位到文档库的根文件夹Get-PnPFolderItem -Folder $rootFolder -ItemType Folder:仅获取根文件夹下的直接子文件夹,不会递归遍历子层级
内容的提问来源于stack exchange,提问作者John John
相关产品推荐
相关产品推荐

