OK, so we have a SharePoint document library with multiple folders that contain multiple files.
How do we delete the contents of a specific folder using PNP PowerShell?
Here goes:
and here is the script:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#Parameters $SiteURL = "https://arachita1.sharepoint.com/sites/A123" $FolderSiteRelativeURL = "/Lib1/TEST123" #Connect to the Site Connect-PnPOnline -URL $SiteURL -Interactive #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 Remove-PnPFolder -Name $SubFolder.Name -Folder $FolderSiteRelativeURL -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 |
The script will display what it has deleted:
Enjoy!


