ค้นหาเว็บไซต์

ลบโฟลเดอร์ว่างใน 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 ของฉัน

บทความที่เกี่ยวข้อง