Add the ability to $IgnoreMissingBackupSources

- when $true, missing external drives or folders don't produce errors
- when $null or $false, missing drives and/or folders result in an error
- Default is set ot $false as not to silently fail backing up a source
This commit is contained in:
Kevin Woley
2021-09-10 21:51:01 -07:00
parent d448db94c0
commit fac2462981
2 changed files with 56 additions and 17 deletions

View File

@@ -186,10 +186,15 @@ function Invoke-Backup {
return $false
}
elseif ($drives.Count -eq 0) {
# TODO: Silently fails if an entire drive is missing. This is good for occasionally mounted external drives, but bad for
# drives that are always expected to be here. May want to make this an optional error.
Write-Output "[[Backup]] Warning - backup path $root_path not found." | Tee-Object -Append $SuccessLog #| Tee-Object -Append $ErrorLog
# $return_value = $false
$ignore_error = ($null -ne $IgnoreMissingBackupSources) -and $IgnoreMissingBackupSources
$warning_message = {Write-Output "[[Backup]] Warning - backup path $root_path not found."}
if($ignore_error) {
& $warning_message | Tee-Object -Append $SuccessLog
}
else {
& $warning_message | Tee-Object -Append $SuccessLog | Tee-Object -Append $ErrorLog
$return_value = $false
}
continue
}
@@ -202,23 +207,56 @@ function Invoke-Backup {
Write-Output "[[Backup]] Start $(Get-Date) [$tag]" | Tee-Object -Append $SuccessLog
# Build the new list of folders from settings (if there are any)
# build the list of folders to backup
$folder_list = New-Object System.Collections.Generic.List[System.Object]
ForEach ($path in $item.Value) {
$p = '"{0}"' -f ((Join-Path $root_path $path) -replace "\\$")
$folder_list.Add($p)
}
# backup everything in the root if no folders are provided
if (-not $folder_list) {
if ($item.Value.Count -eq 0) {
# backup everything in the root if no folders are provided
$folder_list.Add($root_path)
}
else {
# Build the list of folders from settings
ForEach ($path in $item.Value) {
$p = '"{0}"' -f ((Join-Path $root_path $path) -replace "\\$")
if(Test-Path ($p -replace '"')) {
# add the folder if it exists
$folder_list.Add($p)
}
else {
# if the folder doesn't exist, log a warning/error
$ignore_error = ($null -ne $IgnoreMissingBackupSources) -and $IgnoreMissingBackupSources
$warning_message = {Write-Output "[[Backup]] Warning - backup path $p not found."}
if($ignore_error) {
& $warning_message | Tee-Object -Append $SuccessLog
}
else {
& $warning_message | Tee-Object -Append $SuccessLog | Tee-Object -Append $ErrorLog
$return_value = $false
}
}
}
# Launch Restic
& $ResticExe backup $folder_list $vss_option --tag "$tag" --exclude-file=$WindowsExcludeFile --exclude-file=$LocalExcludeFile 3>&1 2>> $ErrorLog | Tee-Object -Append $SuccessLog
if(-not $?) {
Write-Output "[[Backup]] Completed with errors" | Tee-Object -Append $ErrorLog | Tee-Object -Append $SuccessLog
$return_value = $false
}
if(-not $folder_list) {
# there are no folders to backup
$ignore_error = ($null -ne $IgnoreMissingBackupSources) -and $IgnoreMissingBackupSources
$warning_message = {Write-Output "[[Backup]] Warning - no folders to back up!"}
if($ignore_error) {
& $warning_message | Tee-Object -Append $SuccessLog
}
else {
& $warning_message | Tee-Object -Append $SuccessLog | Tee-Object -Append $ErrorLog
$return_value = $false
}
}
else {
# Launch Restic
& $ResticExe backup $folder_list $vss_option --tag "$tag" --exclude-file=$WindowsExcludeFile --exclude-file=$LocalExcludeFile 3>&1 2>> $ErrorLog | Tee-Object -Append $SuccessLog
if(-not $?) {
Write-Output "[[Backup]] Completed with errors" | Tee-Object -Append $ErrorLog | Tee-Object -Append $SuccessLog
$return_value = $false
}
}
Write-Output "[[Backup]] End $(Get-Date) [$tag]" | Tee-Object -Append $SuccessLog

View File

@@ -9,6 +9,7 @@ $LogPath = Join-Path $InstallPath "logs"
$LogRetentionDays = 30
$InternetTestAttempts = 10
$GlobalRetryAttempts = 4
$IgnoreMissingBackupSources = $false
# maintenance configuration
$SnapshotMaintenanceEnabled = $true