Compare commits
8 commits
b1ca51aa8f
...
60d7e7bf83
Author | SHA1 | Date | |
---|---|---|---|
60d7e7bf83 | |||
ba51b397d5 | |||
6b7c1aa95e | |||
74eae2fd11 | |||
990c9eb249 | |||
1397b77f49 | |||
2a40ac1377 | |||
d6c94a35c4 |
3 changed files with 79 additions and 55 deletions
24
backup.ps1
24
backup.ps1
|
@ -13,7 +13,8 @@ $global:logfile = $false
|
|||
$tmp_path = "$PSScriptRoot\tmp"
|
||||
$global:bin_path = "$PSScriptRoot\bin"
|
||||
$ProgressPreference = "SilentlyContinue"
|
||||
$ErrorActionPreference = "SilentlyContinue"
|
||||
$ErrorActionPreference = "Stop"
|
||||
$DebugPreference = "SilentlyContinue"
|
||||
|
||||
if ( $debug ) {
|
||||
$DebugPreference = "Continue"
|
||||
|
@ -21,6 +22,7 @@ if ( $debug ) {
|
|||
|
||||
Import-Module -Name "$PSScriptRoot\lib\backupscript-global_utils.psm1" -Scope Global -Force
|
||||
|
||||
|
||||
function json_to_hash () {
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
|
@ -36,6 +38,7 @@ function json_to_hash () {
|
|||
Write-Debug "Found value $_"
|
||||
$r[$_.Name] = $_.Value
|
||||
}
|
||||
Write-debug "End json_to_hash"
|
||||
return $r
|
||||
}
|
||||
|
||||
|
@ -63,7 +66,7 @@ if ( -not $conf ) {
|
|||
if ( $log ) {
|
||||
$logname = (Get-Item $conf ).Basename
|
||||
$global:logfile = "$PSScriptRoot\log\$((Get-Date).ToString("yyyy.MM.dd"))_$($logname).log"
|
||||
write-debug "Write fo Set-Messagefile $($global:logfile) "
|
||||
write-debug "Write to logfile: $($global:logfile) "
|
||||
|
||||
# Zip old messah=ges (Archives)
|
||||
# TODO: Test this functionnality
|
||||
|
@ -81,7 +84,7 @@ if ( $log ) {
|
|||
"\log\",
|
||||
$logname,
|
||||
".archives.",
|
||||
$_.CreationTime).ToString("yyyy.MM"),
|
||||
($_.CreationTime).ToString("yyyy.MM"),
|
||||
".log.7z`"",
|
||||
" `"",
|
||||
$_.FullName,
|
||||
|
@ -126,8 +129,11 @@ $backup.actions | % {
|
|||
$destination = ""
|
||||
$source = ""
|
||||
|
||||
# Test input path
|
||||
Write-Debug "Process action : $($_.name) | type: $($_.type)"
|
||||
Set-Message "---"
|
||||
Set-Message "Process action : $($_.name) | type: $($_.type)"
|
||||
Set-Message "---"
|
||||
|
||||
# Process source
|
||||
if ( $_.psobject.properties.match('source_eval').Count -and $_.source_eval -eq $true ) {
|
||||
$_.source = eval_var $($_.source)
|
||||
Write-Debug "Result $($_.source)"
|
||||
|
@ -194,8 +200,9 @@ $backup.actions | % {
|
|||
}
|
||||
|
||||
try {
|
||||
Import-Module -Name "$PSScriptRoot\lib\backupscript-$($_.type).psm1" -Force
|
||||
Backup-Create -source $source -dest $destination -name $_.name -opt $opt #-EA Stop
|
||||
Write-Debug "Import module $($_.type)"
|
||||
Import-Module -Name "$PSScriptRoot\lib\backupscript-$($_.type).psm1"
|
||||
Backup-Create -source $source -dest $destination -name $_.name -opt $opt
|
||||
if ( $_.psobject.properties.match('hook_postexec').Count -and $_.hook_postexec -ne "" ) {
|
||||
Set-Message "Postexec hook : execute $($_.hook_postexec)"
|
||||
Invoke-Expression $_.hook_postexec
|
||||
|
@ -210,9 +217,8 @@ $backup.actions | % {
|
|||
if ( Test-Path "$($net_default_letter):" ){
|
||||
Remove-PSDrive -Name $net_default_letter
|
||||
}
|
||||
|
||||
# Remove Module
|
||||
Remove-Module -Name $_.type -Force
|
||||
Get-Module -Name "backupscript-$($_.type)" | Remove-Module -Force
|
||||
}
|
||||
}
|
||||
Set-Message "Backup operation done"
|
||||
|
|
|
@ -1,29 +1,38 @@
|
|||
function Backup-Create () {
|
||||
Param(
|
||||
[Parameter(Mandatory=$True)]
|
||||
[string]
|
||||
$source,
|
||||
[Parameter(Mandatory=$True)]
|
||||
[string]
|
||||
$dest,
|
||||
[Parameter(Mandatory=$false)]
|
||||
[string]
|
||||
$name,
|
||||
[Parameter(Mandatory=$false)]
|
||||
[object]
|
||||
$options
|
||||
)
|
||||
Write-Debug "Module Clone loaded"
|
||||
|
||||
$copy_opt = "--stats=0 --log-level INFO --log-format `"shorfile`" "
|
||||
Set-Message "Sync files from $source to $dest"
|
||||
function Backup-Create () {
|
||||
Param(
|
||||
[Parameter(Mandatory=$True)][string]$source,
|
||||
[Parameter(Mandatory=$True)][string]$dest,
|
||||
[Parameter(Mandatory=$false)][string]$name,
|
||||
[Parameter(Mandatory=$false)][object]$options
|
||||
)
|
||||
|
||||
if ( -not (Test-Path "$global:bin_path\rclone.exe") ) {
|
||||
Throw "Rclone executable not found"
|
||||
}
|
||||
$copy_opt = -join($copy_opt, $(ConvertTo-CmdlineOptions $options))
|
||||
$command = -join($global:bin_path, "\rclone.exe", " sync", " `"$source`"", " `"$dest`"", " $copy_opt", " 2>&1")
|
||||
Set-Message "$command"
|
||||
Invoke-Expression $command -ErrorAction Ignore | % {
|
||||
|
||||
# While I can't process rclone output with | %{ } when script that call this
|
||||
# module is exetutes by a scheduled task, I log all rclone stuff to a
|
||||
# temporary file and process it later
|
||||
|
||||
$rclone_logfile = "$env:TEMP\rclone.log"
|
||||
$clone_options = "--stats=0 --log-level INFO --log-format `"shorfile`" --log-file $rclone_logfile"
|
||||
if ( Test-Path $rclone_logfile ) {
|
||||
Remove-Item $rclone_logfile -Force
|
||||
}
|
||||
Set-Message "Sync files from $source to $dest encule ta mere"
|
||||
$clone_options = -join($clone_options, $(ConvertTo-CmdlineOptions $options))
|
||||
$command = -join($global:bin_path, "\rclone.exe", " sync", " `"$source`"", " `"$dest`"", $clone_options, " 2>&1")
|
||||
Set-Message "execute: $command"
|
||||
try {
|
||||
Invoke-Expression $command -ErrorAction Ignore | Out-Null
|
||||
}
|
||||
catch {
|
||||
Throw "Error on rclone command execution"
|
||||
}
|
||||
Set-Message "Process rclone log file"
|
||||
Get-Content "$rclone_logfile" | % {
|
||||
if ($_ -ne ""){
|
||||
$type, $mdg = ($_ -split ':')[0]
|
||||
$msg = -join ($_ -split ':')[1..2]
|
||||
|
@ -32,7 +41,7 @@
|
|||
"INFO" {
|
||||
Set-Message $msg.trim()
|
||||
}
|
||||
"WARN" {
|
||||
"NOTICE" {
|
||||
Set-Warning $msg.trim()
|
||||
}
|
||||
"ERROR" {
|
||||
|
@ -41,6 +50,15 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
Remove-Item $rclone_logfile -Force -EA Stop | Out-Null
|
||||
}
|
||||
catch [System.Management.Automation.ItemNotFoundException] {
|
||||
Throw "$rclone_logfile not found, can't delete"
|
||||
}
|
||||
catch {
|
||||
Throw "Can't delete $rclone_logfile, reason unknown"
|
||||
}
|
||||
}
|
||||
|
||||
Export-ModuleMember -Function Backup-Create
|
|
@ -1,4 +1,4 @@
|
|||
Write-Output "chargement du module"
|
||||
Write-Debug "Utils module loaded"
|
||||
|
||||
function Get-LogTimeStamp {
|
||||
return (Get-Date).toString("yyyy.MM.dd HH:mm:ss")
|
||||
|
@ -16,7 +16,7 @@ function ConvertTo-CmdlineOptions {
|
|||
$sep=" "
|
||||
)
|
||||
|
||||
Write-Debug "Call parse_options with $options, separator: `"$sep`""
|
||||
Write-Debug "Call ConvertTo-CmdlineOptions with $options, separator: `"$sep`""
|
||||
$opt = ""
|
||||
if ($options -eq $false) {
|
||||
return ""
|
||||
|
|
Reference in a new issue