Weboldal keresés

Távolítsa el az üres mappákat a SharePoint Online-ból


A SharePoint Online duplikált mappáinak egyesítése után el kellett távolítanom az üres mappákat. Ezt a PowerShell és a PnP segítségével is megtehetjük.

# 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

A szkript rekurzívan végigmegy az összes mappán. Ha a mappa üres, akkor törli. Ha a WhatIf változót igaz értékre állítja a szkript tetején, akkor csak azt mutatja, hogy mely mappákat törölné. Így tesztelheti a szkriptet, mielőtt ténylegesen futtatná.

Mappák törlése név alapján

Ha csak a nevük alapján kell törölnie mappákat, például egy *(1)-gyel végződő mappát, akkor a törlési funkció utolsó részét módosíthatja a következőre:

    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
			}
		}
    }

A szkript eredeti verziója itt található a Sharepointdairy.com oldalon. Csak néhány apró változtatást végeztem a forgatókönyvön. A teljes forgatókönyvet itt is megkaphatja a Githubon.

Kapcsolódó cikkek