当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 删除 SharePoint Online 中的空文件夹

作者:精品下载站 日期:2024-12-14 03:40:09 浏览:13 分类:玩电脑

删除 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 上获取完整的脚本。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯