SharePoint Online:使用 PowerShell 递归删除文件夹中的所有文件和子文件夹
要求:通过递归删除其所有文件和子文件夹来清空 SharePoint Online 文档库中的文件夹。
如何从 SharePoint Online 删除包含子文件夹和文件的文件夹?
可以通过 SharePoint 用户界面删除 SharePoint Online 中的文件和子文件夹。若要从 SharePoint Online 中的文件夹中删除所有文件和子文件夹,请执行以下步骤:
- 在浏览器中打开 SharePoint Online 网站 >> 导航到要删除的文件夹。
- 选择文件夹中的所有文件和子文件夹。
- 单击命令栏中的“删除”按钮或右键单击并选择“删除”。
单击确认对话框中的“删除”以确认删除。
删除文件和子文件夹是一个相当简单的过程,但如果您有多个文件和子文件夹要删除,则此过程可能会变得非常耗时。要自动执行此任务,您可以使用 PowerShell。让我们探讨如何使用 PowerShell 递归地从 SharePoint Online 中的文件夹中删除所有文件和子文件夹。
PowerShell 从 SharePoint Online 文件夹中删除所有文件和子文件夹
在准备迁移时,我必须清除一些旧数据 - 因此我需要从 SharePoint Online 网站递归删除文件和文件夹。我们可以使用PowerShell在SharePoint Online中递归删除文件和文件夹。这可能是快速清理网站或删除大量内容的好方法。
让我们从 SharePoint Online 中删除包含子文件夹和文件的文件夹:
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Function to Delete all files and Sub-folders of a given Folder
Function Empty-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
Try {
#Get All Files from the Folder
$Ctx = $Folder.Context
$Files = $Folder.Files
$Ctx.Load($Files)
$Ctx.ExecuteQuery()
#Iterate through each File in the Root folder
Foreach($File in $Files)
{
#Delete the file
$Folder.Files.GetByUrl($File.ServerRelativeUrl).Recycle() | Out-Null
Write-host -f Green "Deleted File '$($File.Name)' from '$($File.ServerRelativeURL)'"
}
$Ctx.ExecuteQuery()
#Process all Sub Folders of the given folder
$SubFolders = $Folder.Folders
$Ctx.Load($SubFolders)
$Ctx.ExecuteQuery()
#delete all subfolders
Foreach($Folder in $SubFolders)
{
#Exclude "Forms" and Hidden folders
If( ($Folder.Name -ne "Forms") -and (-Not($Folder.Name.StartsWith("_"))))
{
#Call the function recursively to empty the folder
Empty-SPOFolder -Folder $Folder
#Delete the folder
$Ctx.Web.GetFolderById($Folder.UniqueId).Recycle() | Out-Null
$Ctx.ExecuteQuery()
Write-host -f Green "Deleted Folder:"$Folder.ServerRelativeUrl
}
}
}
Catch {
write-host -f Red "Error:" $_.Exception.Message
}
}
#Variables
$SiteURL = "https://crescent.sharepoint.com/Sites/Marketing"
$ServerRelativeUrl= "/Sites/Marketing/Project Documents/2018"
Try {
#Get Credentials to connect
$Cred= Get-Credential
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Get the web from URL
$Web = $Ctx.web
$Ctx.Load($Web)
$Ctx.executeQuery()
#Get the Folder object by Server Relative URL
$Folder = $Web.GetFolderByServerRelativeUrl($ServerRelativeUrl)
$Ctx.Load($Folder)
$Ctx.ExecuteQuery()
#Call the function to empty Folder
Empty-SPOFolder $Folder
#Delete the given Folder itself
Write-host -f Green "Deleting Folder:"$Folder.ServerRelativeUrl
$Folder.Recycle() | Out-Null
$Ctx.ExecuteQuery()
}
Catch {
write-host -f Red "Error:" $_.Exception.Message
}
此 PowerShell 脚本删除文件夹的所有文件、子文件夹,然后也删除给定文件夹。
PnP PowerShell 清空 SharePoint Online 中的文件夹:
使用 PnP PowerShell,我们可以轻松地递归删除所有文件和文件夹,而不是一次一个地手动删除它们。以下是用于清除 SharePoint Online 文档库中给定文件夹的所有文件和子文件夹的 PnP PowerShell 脚本:
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$FolderSiteRelativeURL = "Shared Documents/2018"
#Connect to the Site
Connect-PnPOnline -URL $SiteURL -Credentials (Get-Credential)
#Get the web & folder
$Web = Get-PnPWeb
$Folder = Get-PnPFolder -Url $FolderSiteRelativeURL
#Function to delete all Files and sub-folders from a Folder
Function Empty-PnPFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
#Get the site relative path of the Folder
If($Web.ServerRelativeURL -eq "/")
{
$FolderSiteRelativeURL = $Folder.ServerRelativeUrl
}
Else
{
$FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Replace($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 ("Deleted 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
$ParentFolderURL = $FolderSiteRelativeURL.TrimStart("/")
Remove-PnPFolder -Name $SubFolder.Name -Folder $ParentFolderURL -Force -Recycle
Write-Host -f Green ("Deleted Folder: '{0}' at '{1}'" -f $SubFolder.Name, $SubFolder.ServerRelativeURL)
}
}
}
#Call the function to empty folder
Empty-PnPFolder -Folder $Folder
若要删除 SharePoint Online 文档库中的文件夹,请使用:SharePoint Online:如何使用 PowerShell 删除文件夹?
删除 SharePoint Online 中包含文件的文件夹
由于保留策略而无法删除 SharePoint Online 中的文件夹?以下是从文件夹中删除所有文件和子文件夹的方法:
- 使用 Connect-PnPOnline cmdlet 连接到 SharePoint Online。
- 使用 Get-PnPListItem cmdlet 检索文件夹的内容。
- 使用Remove-PnPListItem cmdlet 删除文件夹中的所有文件和子文件夹。
#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName ="Branding"
$FolderServerRelativeURL = "/sites/Marketing/Branding/2019"
Try {
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get All Items from Folder in Batch
$ListItems = Get-PnPListItem -List $ListName -FolderServerRelativeUrl $FolderServerRelativeURL -PageSize 2000 | Sort-Object ID -Descending
#Powershell to delete all files from a folder
ForEach ($Item in $ListItems)
{
Remove-PnPListItem -List $ListName -Identity $Item.Id -Recycle -Force
Write-host "Removed File:"$Item.FieldValues.FileRef
}
}
Catch {
write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
上述代码可能会导致较大列表上出现超出阈值的问题。如何批量删除一个大文件夹及其文件和子文件夹以避免任何潜在的列表视图阈值超出问题?使用此脚本清空 SharePoint Online 中的文件夹:
#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName ="Branding"
$FolderServerRelativeURL = "/sites/Marketing/Shared Documents/2019/*"
Try {
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -UseWebLogin
#Get All Items from Folder in Batch
$ListItems = Get-PnPListItem -List $ListName -PageSize 2000 | Sort-Object ID -Descending
#Get List Items from the folder
$ItemsFromFolder = $ListItems | Where {$_.FieldValues.FileDirRef -like $FolderServerRelativeURL }
$ItemCount = $ItemsFromFolder.count
Write-host "Total Number of Items Found in the Folder:"$ItemCount
$Counter = 1
#Powershell to delete all files from a folder
ForEach ($Item in $ItemsFromFolder)
{
Remove-PnPListItem -List $ListName -Identity $Item.Id -Recycle -Force
Write-host "Removed Item ($Counter of $ItemCount):"$Item.FieldValues.FileRef
$Counter++
}
}
Catch {
write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
要从 CSV 文件中删除 SharePoint Online 中的多个文件夹,请使用:使用 PowerShell 从 CSV 中批量删除 SharePoint Online 中的文件夹?
结论:
总之,使用 PowerShell 从 SharePoint Online 中的文件夹中删除所有文件和子文件夹是自动执行清理 SharePoint 环境任务的强大且高效的方法。通过利用 PowerShell 的功能,您可以节省时间并确保您的 SharePoint 环境保持井然有序且精简。但是,重要的是要谨慎使用此方法,并且只有在确认不需要删除的文件和文件夹之后才可以。 SharePoint Online 中删除的文件和文件夹将移至回收站,并且可以在一定时间内恢复,因此请确保负责任地使用这些命令。

