Needed to do this in work recently, found this excellent link over here: https://www.sharepointdiary.com/2017/07/download-folder-from-sharepoint-online-using-powershell.html
Needs to open a Powershell window first and run “Install-Module -Name "PnP.PowerShell"
”
#Function to Download All Files from a SharePoint Online Folder - Recursively
Function Download
-SPOFolder
([Microsoft.SharePoint.Client.Folder]
$Folder
,
$DestinationFolder
)
{
#Get the Folder's Site Relative URL
$FolderURL
=
$Folder
.ServerRelativeUrl.Substring(
$Folder
.Context.Web.ServerRelativeUrl.Length)
$LocalFolder
=
$DestinationFolder
+ (
$FolderURL
-replace
"/"
,"\")
#Create Local Folder, if it doesn't exist
If (!(
Test-Path
-Path
$LocalFolder
)) {
New-Item
-ItemType
Directory
-Path
$LocalFolder
|
Out-Null
Write-host
-f
Yellow
"Created a New Folder '$LocalFolder'"
}
#Get all Files from the folder
$FilesColl
= Get
-PnPFolderItem
-FolderSiteRelativeUrl
$FolderURL
-ItemType
File
#Iterate through each file and download
Foreach
(
$File
in
$FilesColl
)
{
Get
-PnPFile
-ServerRelativeUrl
$File
.ServerRelativeUrl
-Path
$LocalFolder
-FileName
$File
.Name
-AsFile
-force
Write-host
-f
Green
"`tDownloaded File from '$($File.ServerRelativeUrl)'"
}
#Get Subfolders of the Folder and call the function recursively
$SubFolders
= Get
-PnPFolderItem
-FolderSiteRelativeUrl
$FolderURL
-ItemType
Folder
Foreach
(
$Folder
in
$SubFolders
|
Where
{$_.Name
-ne
"Forms"
})
{
Download
-SPOFolder
$Folder
$DestinationFolder
}
}
#Set Parameters
$SiteURL
=
"https://crescent.sharepoint.com/sites/marketing"
$FolderSiteRelativeURL
=
"/Team Documents/2018"
$DownloadPath
=
"C:\Docs"
#Connect to PnP Online
Connect
-PnPOnline
-Url
$SiteURL
-UseWebLogin
#Get the folder to download
$Folder
= Get
-PnPFolder
-Url
$FolderSiteRelativeURL
#Call the function to download the folder
Download
-SPOFolder
$Folder
$DownloadPath
Thank you so much! The first script, that actually WORK on powershell 7!
Spent few days looking for!!