Удалить пустые папки в SharePoint Online
После объединения дублирующихся папок в SharePoint Online мне нужно было удалить пустые папки. Это также можно сделать с помощью PowerShell и PnP.
SharePoint url
$siteUrl = 'https://a-d.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 в значение true в начале сценария, он покажет только те папки, которые он удалит. Таким образом, вы сможете протестировать сценарий перед его фактическим выполнением.
Удалите папки на основе имени
Если вам нужно удалить папки только на основе их имени, например, папку, которая заканчивается на *(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.