X-Git-Url: https://git.p6c8.net/dsmonrot.git/blobdiff_plain/bca3ccac96405fb70f0bf68ae4bf19233e295971..a82b78082fdbb2f7614844cbdf9ec371699194b1:/dsmonrot.ps1 diff --git a/dsmonrot.ps1 b/dsmonrot.ps1 index b838d75..82b5014 100644 --- a/dsmonrot.ps1 +++ b/dsmonrot.ps1 @@ -13,12 +13,18 @@ # Path to backup directory [String]$backupDir = "Z:\" -# Keep backup for this amount of months (excluding the current month), -1 for indefinite +# Keep backup for this amount of months (excluding the current month), +# -1 for indefinite [Int32]$keepMonths = 2 # Path to Drive Snapshot [String]$dsPath = "C:\Users\Patrick\Desktop\DSMonRot\snapshot.exe" -# Path to Drive Snapshot log file -[String]$dsLogFile = "C:\Users\Patrick\Desktop\DSMonRot\snapshot.log" +# Path to Drive Snapshot log file (specify only the file name if you set +# $dsLogFileToBackup to $True) +#[String]$dsLogFile = "C:\Users\Patrick\Desktop\DSMonRot\snapshot.log" +[String]$dsLogFile = "snapshot.log" +# Set to $True if you want to put the log file of Drive Snapshot into the same +# directory as the backup +[Boolean]$dsLogFileToBackup = $True # Disks to backup, see http://www.drivesnapshot.de/en/commandline.htm [String]$disksToBackup = "HD1:1" # Path to DSMonRot log file @@ -40,7 +46,7 @@ # To address of email notification [String]$emailToAddress = "patrick@test.local" # Subject of email notification -[String]$emailSubject = "DSMonRot" +[String]$emailSubject = "DSMonRot on $env:computername" # Mail server [String]$emailMailserver = "localhost" # SMTP Port @@ -56,7 +62,7 @@ # End of config -$dsAdditionalArgs = @("--logfile:$dsLogFile", "--UseVSS") +$dsAdditionalArgs = @("--UseVSS") # Allow SMTP with SSL and SMTP Auth # see: http://petermorrissey.blogspot.de/2013/01/sending-smtp-emails-with-powershell.html @@ -64,21 +70,23 @@ function Send-Email([String]$body) { Write-Host "Sending email: $emailToAddress, $body" try { - $smtp = New-Object System.Net.Mail.SmtpClient($emailMailServer, $emailPort); + $smtp = New-Object System.Net.Mail.SmtpClient($emailMailServer, $emailPort) $smtp.EnableSSL = $emailSSL if($emailAuth) { - $smtp.Credentials = New-Object System.Net.NetworkCredential($emailUser, $emailPassword); + $smtp.Credentials = New-Object System.Net.NetworkCredential($emailUser, $emailPassword) } - $smtp.Send($emailFromAddress, $emailToAddress, $emailSubject, $body); + $smtp.Send($emailFromAddress, $emailToAddress, $emailSubject, $body) } catch { Write-Host "Could not send email: $_.Exception.Message" } } +Write-Host "Started at" (Get-Date -format "yyyy-MM-dd HH:mm:ss") + $errorMessages = @() $smbConnected = $False @@ -105,7 +113,7 @@ if($smbDrive) { $smbConnected = $True } Catch { - Write-Host "Could not connect to network drive: $_.Exception.Message" + Write-Host "Could not connect to network drive $smbDrive`: $_.Exception.Message" exit } } @@ -147,18 +155,23 @@ if((Test-Path $backupTarget) -and (Test-Path $backupTargetFull) -and (Test-Path exit } - $dsArgs = @($disksToBackup, "$backupTargetDiff\`$disk.sna", "-h$backupTargetFull\`$disk.hsh") + $dsAdditionalArgs + $dsLogPath = if($dsLogFileToBackup) { "$backupTargetDiff\$dsLogFile" } else { $dsLogFile } + + $dsArgs = @($disksToBackup, "--logfile:$dsLogPath", "$backupTargetDiff\`$disk.sna", "-h$backupTargetFull\`$disk.hsh") + $dsAdditionalArgs Write-Host $dsPath ($dsArgs -join " ") & $dsPath $dsArgs if($LastExitCode -ne 0) { - Write-Host "Error code: $LastExitCode" + Write-Host "Drive Snapshot failed to backup! Exit code: $LastExitCode" + $errorMessages += "Drive Snapshot failed to backup! Exit code: $LastExitCode" + } + else { + $success = $True } } else { Write-Host "Directory $backupTargetDiff already exists!" - $errorMessages += "Directory $backupTargetDiff already exists!" } } @@ -174,20 +187,24 @@ else { Write-Host "Creating directory $backupTargetFull" New-Item -ItemType directory -Path $backupTargetFull } + + $dsLogPath = if($dsLogFileToBackup) { "$backupTargetFull\$dsLogFile" } else { $dsLogFile } - $dsArgs = @($disksToBackup, "$backupTargetFull\`$disk.sna") + $dsAdditionalArgs + $dsArgs = @($disksToBackup, "--logfile:$dsLogPath", "$backupTargetFull\`$disk.sna") + $dsAdditionalArgs Write-Host $dsPath ($dsArgs -join " ") & $dsPath $dsArgs if($LastExitCode -ne 0) { - Write-Host "Error code: $LastExitCode" + Write-Host "Drive Snapshot failed to backup! Exit code: $LastExitCode" + $errorMessages += "Drive Snapshot failed to backup! Exit code: $LastExitCode" + } + else { + $success = $True } - - $success = $False } -if($isDiff -eq $False -and $success -eq $True -and $keepMonths -ge 0) { +if(!$isDiff -and $success -eq $True -and $keepMonths -ge 0) { Write-Host "Rotating" $keepMonthsCount = $keepMonths @@ -200,8 +217,6 @@ if($isDiff -eq $False -and $success -eq $True -and $keepMonths -ge 0) { $keepMonthsCount-- } - Write-Host $keepMonthsCount - if($keepMonthsCount -eq -1) { Write-Host "Deleting $_" Remove-Item -Recurse -Force $_.FullName @@ -211,9 +226,18 @@ if($isDiff -eq $False -and $success -eq $True -and $keepMonths -ge 0) { if($smbConnected) { Write-Host "Disconnecting network drive" - Remove-PSDrive $smbDrive + + try { + Remove-PSDrive $smbDrive -ErrorAction Stop + } + catch { + Write-Host "Could not disconnect network drive $smbDrive`: $_.Exception.Message" + $errorMessages += "Could not disconnect network drive $smbDrive`: $_.Exception.Message" + } } if($emailOnError -and $errorMessages.Count -gt 0) { Send-Email ("Error:`n"+($errorMessages -join "`n")) -} \ No newline at end of file +} + +Write-Host "Ended at" (Get-Date -format "yyyy-MM-dd HH:mm:ss") \ No newline at end of file