网站搜索

SharePoint Online:使用 PowerShell 从 CSV 批量删除文件夹


要求:批量删除 SharePoint Online 中的文件夹。

如何批量删除 SharePoint Online 中的多个文件夹?

您是否曾经想要从 SharePoint Online 中批量删除多个文件夹以清理您的网站或删除过时或不需要的内容?如果是这样,您可能熟悉选择每个文件夹然后将其删除的挑战。这篇博文将向您展示如何快速删除 SharePoint Online 中的多个文件夹。

我们可以使用 CSV 文件和 PowerShell 脚本来批量删除文件夹及其子文件夹和文件:


#Set Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Projects"
$CSVFilePath = "C:\Users\Thomas\Desktop\BulkDeleteFolders.csv"
  
#Connect to the site
Connect-PnPOnline -Url $SiteURL -Interactive

#Get the data from CSV file
$CSVFile = Import-CSV $CSVFilePath | Sort-Object ParentFolderSiteRelativeURL -Descending
  
#Read CSV file and delete each folder
ForEach($Row in $CSVFile)
{
    Try {
        #Check if folder exists
        $Folder  = Get-PnPFolderItem -FolderSiteRelativeUrl $Row.ParentFolderSiteRelativeURL -ItemName $Row.FolderName #-ErrorAction SilentlyContinue
        If($Folder -ne $Null)
        {
            #Delete the folder        
            Remove-PnPFolder -Name $Row.FolderName -Folder $Row.ParentFolderSiteRelativeURL -Recycle -Force
            Write-host -f Green "Folder '$($Row.FolderName)' Deleted Successfully from $($Row.ParentFolderSiteRelativeURL)"
        }
        Else
        {
            Write-Host "Folder '$($Row.FolderName)' doesn't exists at $($Row.ParentFolderSiteRelativeURL)" -ForegroundColor Yellow
        }
    }
    Catch {
        write-host -f Red "`tError:" $_.Exception.Message
    }
}

该脚本可让您一次删除多个文件夹,从而提高效率。如果您需要快速从站点中删除许多文件夹,这可能是一种有用的技术。这是我的 CSV 文件,其中包含文件夹名称列表及其父文件夹的站点相对 URL。

您可以从此处下载 CSV 以删除文件夹:

SharePoint Online:无法删除包含文件的文件夹?

当您的网站未置于保留保留策略之下时,上述脚本可以正常工作。但是,您必须删除该文件夹的所有文件和子文件夹,以避免出现“您必须先删除该文件夹中的所有项目才能删除该文件夹”的情况。错误信息。

SharePoint Online:用于从 CSV 文件批量删除文件夹的 PowerShell 脚本

此 PowerShell 脚本以递归方式从给定站点的 CSV 文件中删除每个文件夹及其内容(文件、子文件夹)。


#Set Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$CSVFilePath = "C:\Users\Thomas\Desktop\BulkDeleteFolders.csv"

#Function to delete all Files and sub-folders from a Folder
Function Empty-PnPFolder($Folder)
{
    #Get the site relative path of the Folder
    If($Folder.Context.Web.ServerRelativeUrl -eq "/")
    {
        $FolderSiteRelativeURL = $Folder.ServerRelativeUrl
    }
    Else
    {        
        $FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Replace($Folder.Context.Web.ServerRelativeURL,[string]::Empty)
    }

    #Delete all files in the Folder
    $Files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType File
    ForEach ($File in $Files)
    {
        #Delete File
        Remove-PnPFile -ServerRelativeUrl $File.ServerRelativeURL -Force -Recycle
        Write-Host -f Green ("`tDeleted File: '{0}' at '{1}'" -f $File.Name, $File.ServerRelativeURL)        
    }
 
    #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
            Empty-PnPFolder -Folder $SubFolder
 
            #Delete the folder
            Remove-PnPFolder -Name $SubFolder.Name -Folder $FolderSiteRelativeURL -Force -Recycle
            Write-Host -f Green ("`tDeleted Folder: '{0}' at '{1}'" -f $SubFolder.Name, $SubFolder.ServerRelativeURL)
        }
    }
}
  
#Connect to the site
Connect-PnPOnline -Url $SiteURL -Interactive

#Get the data from CSV file
$CSVFile = Import-CSV $CSVFilePath | Sort-Object ParentFolderSiteRelativeURL -Descending
  
#Read CSV file and delete each folder
ForEach($Row in $CSVFile)
{
    Try {
        #Check if folder exists
        $Folder  = Get-PnPFolderItem -FolderSiteRelativeUrl $Row.ParentFolderSiteRelativeURL -ItemName $Row.FolderName #-ErrorAction SilentlyContinue
        If($Folder -ne $Null)
        {
            Write-Host -f Yellow "Deleting Folder '$($Row.FolderName)' from $($Row.ParentFolderSiteRelativeURL)..."
            #Empty the Folder
            Empty-PnPFolder $Folder

            #Delete the folder
            Remove-PnPFolder -Name $Row.FolderName -Folder $Row.ParentFolderSiteRelativeURL -Recycle -Force
            Write-host -f Green "`tFolder '$($Row.FolderName)' Deleted Successfully!"
        }
        Else
        {
            Write-Host "Folder '$($Row.FolderName)' doesn't exists at $($Row.ParentFolderSiteRelativeURL)" -ForegroundColor Yellow
        }
    }
    Catch {
        write-host -f Red "`tError:" $_.Exception.Message
    }
}

此脚本首先删除所有文件和子文件夹,然后删除 SharePoint Online 中的文件夹。要从 CSV 文件批量删除文件,请使用:SharePoint Online:使用 PowerShell 从 CSV 批量删除文件

经常问的问题:

如何删除 SharePoint Online 中的文件夹?

要删除 SharePoint Online 中的文件夹,请从列表或文档库中选择该文件夹,然后单击工具栏中的“删除”按钮。您还可以右键单击该文件夹,然后从上下文菜单中选择“删除”。 PowerShell 也有助于删除 SharePoint Online 中的文件夹。
详细信息:在 SharePoint Online PowerShell 中删除文件夹

如何使用 PowerShell 删除 SharePoint Online 中的文件?

使用 CSOM 中的 $File.DeleteObject() 方法或 PnP PowerShell 中的 Remove-PnPFile cmdlet 从 SharePoint Online 删除文件。
详细信息:SharePoint Online PowerShell 删除文件

相关文章