I'm having a bit of difficulty adding retry loop into a Powershell Sharepoint download script and would really appreciate some help with adding to the script below.
What I'm wanting to do is; If successful, then finish.
If 1'st failure, retry in x seconds (say 5 minutes)
if 2nd failure send email advising there is a problem then finish.
Function Download-FilesFromSharePointSiteLibrary()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $LibraryName,
[Parameter(Mandatory=$true)] [string] $TargetFolder
)
Try {
# Credentials to Connect to SharePoint
$Username = "Test.User@email.com"
$Password = Get-Content "C:\SharePoint\SharePoint-Credentials.txt" | ConvertTo-SecureString
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $Password)
# Login to SharePoint Client
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
# Get Files from SharePoint Site Library
$List = $Ctx.Web.Lists.GetByTitle($LibraryName)
$Ctx.Load($List)
$Ctx.ExecuteQuery()
# Get Files from SharePoint Site Library Folder
$Folder = $List.RootFolder
$FilesColl = $Folder.Files
$Ctx.Load($FilesColl)
$Ctx.ExecuteQuery()
Foreach($File in $FilesColl)
{
$TargetFile = $TargetFolder+$File.Name
# Download File from SharePoint Library Folder
$FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Ctx,$File.ServerRelativeURL)
$WriteStream = [System.IO.File]::Open($TargetFile,[System.IO.FileMode]::Create)
$FileInfo.Stream.CopyTo($WriteStream)
$WriteStream.Close()
# Delete File from SharePoint Library Folder
$File.DeleteObject()
$Ctx.ExecuteQuery()
}
# Success - End Program
Write-host -f Green "Success!" $_.Exception.Message
}
Catch {
# Failure - Sleep for 5 Minutes
Write-host -f Red "Failure!" $_.Exception.Message
Send-MailMessage -From "no-reply@email.com" -To "Test.User@email.com" -Subject "Failure: SharePoint Connector" -Body "Failure occurred with SharePoint Connector on Server.`n`n$_" -Priority "High" -SMTPServer "smtp.email.com" -Port "25"
Start-Sleep -Seconds 300
}
}
# SharePoint Site Parameters and Target Directory
$SiteURL="https://site.sharepoint.com/sites/Test"
$LibraryName="Library"
$TargetFolder="C:\SharePoint\Files\"
# Run Program
Download-FilesFromSharePointSiteLibrary -SiteURL $SiteURL -LibraryName $LibraryName -TargetFolder $TargetFolder