diff --git a/backup.ps1 b/backup.ps1 index 8b3b437..234f3a7 100644 --- a/backup.ps1 +++ b/backup.ps1 @@ -45,6 +45,12 @@ function Invoke-Unlock { function Invoke-Maintenance { Param($SuccessLog, $ErrorLog) + # skip maintenance if disabled + if($SnapshotMaintenanceEnabled -eq $false) { + Write-Output "[[Maintenance]] Skipped - maintenance disabled" | Tee-Object -Append $SuccessLog + return + } + # skip maintenance if it's been done recently if(($null -ne $ResticStateLastMaintenance) -and ($null -ne $ResticStateMaintenanceCounter)) { $Script:ResticStateMaintenanceCounter += 1 @@ -129,6 +135,10 @@ function Invoke-Backup { $ShadowPath = Join-Path $item.Key 'resticVSS' # Create a symbolic link to the shadow copy + if(Test-Path $ShadowPath) { + Write-Output "[[Backup]] VSS directory exists: '$ShadowPath' - removing. Past script failure?" | Tee-Object -Append $ErrorLog | Tee-Object -Append $SuccessLog + cmd /c rmdir $ShadowPath + } cmd /c mklink /d $ShadowPath "$device" 3>&1 2>> $ErrorLog | Tee-Object -Append $SuccessLog # Build the new list of folders @@ -192,8 +202,10 @@ function Send-Email { $attachments = @{Attachments = $ErrorLog} $status = "ERROR" } - $subject = "$env:COMPUTERNAME Restic Backup Report [$status]" - Send-MailMessage @ResticEmailConfig -From $ResticEmailFrom -To $ResticEmailTo -Credential $credentials -Subject $subject -Body $body @attachments + if((($status -eq "SUCCESS") -and ($SendEmailOnSuccess -ne $false)) -or (($status -eq "ERROR") -and ($SendEmailOnError -ne $false))) { + $subject = "$env:COMPUTERNAME Restic Backup Report [$status]" + Send-MailMessage @ResticEmailConfig -From $ResticEmailFrom -To $ResticEmailTo -Credential $credentials -Subject $subject -Body $body @attachments + } } function Invoke-ConnectivityCheck { @@ -294,6 +306,7 @@ function Invoke-Main { Write-Output "Something went wrong. Sleeping for 15 min and then retrying..." | Tee-Object -Append $success_log if($internet_available -eq $true) { + Invoke-HistoryCheck $success_log $error_log Send-Email $success_log $error_log } Start-Sleep (15*60) diff --git a/config.ps1 b/config.ps1 index 6911e74..72d3e35 100644 --- a/config.ps1 +++ b/config.ps1 @@ -7,12 +7,19 @@ $WindowsExcludeFile = Join-Path $InstallPath "windows.exclude" $LocalExcludeFile = Join-Path $InstallPath "local.exclude" $LogPath = Join-Path $InstallPath "logs" $LogRetentionDays = 30 +$InternetTestAttempts = 10 +$GlobalRetryAttempts = 4 + +# maintenance configuration +$SnapshotMaintenanceEnabled = $true $SnapshotRetentionPolicy = @("--keep-daily", "30", "--keep-weekly", "52", "--keep-monthly", "24", "--keep-yearly", "10") $SnapshotMaintenanceInterval = 7 $SnapshotMaintenanceDays = 30 $SnapshotDeepMaintenanceDays = 90; -$InternetTestAttempts = 10 -$GlobalRetryAttempts = 4 + +# email configuration +$SendEmailOnSuccess = $false +$SendEmailOnError = $true # Paths to backup $BackupSources = @{}