ลบโฟลเดอร์ว่างใน SharePoint Online
หลังจากรวมโฟลเดอร์ที่ซ้ำกันใน SharePoint Online ฉันจำเป็นต้องลบโฟลเดอร์ว่างออก นี่คือสิ่งที่เราสามารถทำได้เช่นกันกับ PowerShell และ PnP
# SharePoint url
$siteUrl = 'https://lazyadmin.sharepoint.com/'
# Site url
$site = 'sites/lab01'
# Library name
$libraryName = 'Duplicates'
# Set test mode
$whatIf = $true
# Set force mode
# Only set to true if you have fully tested it. Script WON'T ask for confirmation before deleting the file
$force = $false
#-----------------------------------------------------------[Functions]------------------------------------------------------------
#src https://www.sharepointdiary.com/2018/09/sharepoint-online-delete-empty-folders-using-powershell.html
Function Delete-PnPEmptyFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
$FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length)
# Process all Sub-Folders
$SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType Folder
Foreach($SubFolder in $SubFolders)
{
# Exclude "Forms" and Hidden folders
If(($SubFolder.Name -ne "Forms") -and (-Not($SubFolder.Name.StartsWith("_"))))
{
# Call the function recursively
Delete-PnPEmptyFolder -Folder $SubFolder
}
}
# Get all files & Reload Sub-folders from the given Folder
$Files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType File
$SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType Folder
If ($Files.Count -eq 0 -and $SubFolders.Count -eq 0)
{
#Delete the folder
$ParentFolder = Get-PnPProperty -ClientObject $Folder -Property ParentFolder
$ParentFolderURL = $ParentFolder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length)
if ($whatIf -ne $true)
{
#Delete the folder
Write-Host "Remove folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
Remove-PnPFolder -Name $Folder.Name -Folder $ParentFolderURL -force:$force -Recycle
}
else
{
Write-host $parentFolder
Write-Host "Empty folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
}
}
}
#-----------------------------------------------------------[Execution]------------------------------------------------------------
# Login
$url = $siteUrl + '/' + $site
Connect-PnPOnline -Url $url -UseWebLogin
# Cleanup empty folders
$Web = Get-PnPWeb
$List = Get-PnPList -Identity $libraryName -Includes RootFolder
Delete-PnPEmptyFolder $List.RootFolderสคริปต์จะผ่านทุกโฟลเดอร์แบบวนซ้ำ ถ้าโฟลเดอร์ว่างก็จะลบทิ้ง หากคุณตั้งค่าตัวแปร WhatIf ให้เป็นจริงที่ด้านบนของสคริปต์ ตัวแปรจะแสดงเฉพาะโฟลเดอร์ที่จะลบเท่านั้น วิธีนี้ทำให้คุณสามารถทดสอบสคริปต์ก่อนที่จะรันจริงได้
ลบโฟลเดอร์ตามชื่อ
หากคุณต้องการลบโฟลเดอร์ตามชื่อเท่านั้น เช่น โฟลเดอร์ที่ลงท้ายด้วย *(1) คุณสามารถเปลี่ยนส่วนสุดท้ายของฟังก์ชันลบเป็น:
If ($Files.Count -eq 0 -and $SubFolders.Count -eq 0)
{
if ($Folder.Name -like "*(1)") {
#Delete the folder
$ParentFolder = Get-PnPProperty -ClientObject $Folder -Property ParentFolder
$ParentFolderURL = $ParentFolder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length)
if ($whatIf -ne $true)
{
#Delete the folder
Write-Host "Remove folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
Remove-PnPFolder -Name $Folder.Name -Folder $ParentFolderURL -force:$force -Recycle
}
else
{
Write-host $parentFolder
Write-Host "Empty folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
}
}
}คุณสามารถค้นหาสคริปต์เวอร์ชันดั้งเดิมได้ที่นี่ที่ Sharepointdairy.com ฉันได้ทำการเปลี่ยนแปลงสคริปต์เพียงเล็กน้อยเท่านั้น คุณยังสามารถรับสคริปต์ฉบับเต็มได้ที่นี่ที่ Github ของฉัน