Compare commits
No commits in common. "60d7e7bf83ded5880525167646b141c76ffd63f1" and "b1ca51aa8f7646c32a65b41e7cebb13a3b294d89" have entirely different histories.
60d7e7bf83
...
b1ca51aa8f
3 changed files with 55 additions and 79 deletions
26
backup.ps1
26
backup.ps1
|
@ -13,8 +13,7 @@ $global:logfile = $false
|
|||
$tmp_path = "$PSScriptRoot\tmp"
|
||||
$global:bin_path = "$PSScriptRoot\bin"
|
||||
$ProgressPreference = "SilentlyContinue"
|
||||
$ErrorActionPreference = "Stop"
|
||||
$DebugPreference = "SilentlyContinue"
|
||||
$ErrorActionPreference = "SilentlyContinue"
|
||||
|
||||
if ( $debug ) {
|
||||
$DebugPreference = "Continue"
|
||||
|
@ -22,7 +21,6 @@ if ( $debug ) {
|
|||
|
||||
Import-Module -Name "$PSScriptRoot\lib\backupscript-global_utils.psm1" -Scope Global -Force
|
||||
|
||||
|
||||
function json_to_hash () {
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
|
@ -38,7 +36,6 @@ function json_to_hash () {
|
|||
Write-Debug "Found value $_"
|
||||
$r[$_.Name] = $_.Value
|
||||
}
|
||||
Write-debug "End json_to_hash"
|
||||
return $r
|
||||
}
|
||||
|
||||
|
@ -66,7 +63,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 to logfile: $($global:logfile) "
|
||||
write-debug "Write fo Set-Messagefile $($global:logfile) "
|
||||
|
||||
# Zip old messah=ges (Archives)
|
||||
# TODO: Test this functionnality
|
||||
|
@ -84,7 +81,7 @@ if ( $log ) {
|
|||
"\log\",
|
||||
$logname,
|
||||
".archives.",
|
||||
($_.CreationTime).ToString("yyyy.MM"),
|
||||
$_.CreationTime).ToString("yyyy.MM"),
|
||||
".log.7z`"",
|
||||
" `"",
|
||||
$_.FullName,
|
||||
|
@ -129,12 +126,9 @@ $backup.actions | % {
|
|||
$destination = ""
|
||||
$source = ""
|
||||
|
||||
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 ) {
|
||||
# Test input path
|
||||
Write-Debug "Process action : $($_.name) | type: $($_.type)"
|
||||
if ( $_.psobject.properties.match('source_eval').Count -and $_.source_eval -eq $true ) {
|
||||
$_.source = eval_var $($_.source)
|
||||
Write-Debug "Result $($_.source)"
|
||||
}
|
||||
|
@ -200,9 +194,8 @@ $backup.actions | % {
|
|||
}
|
||||
|
||||
try {
|
||||
Write-Debug "Import module $($_.type)"
|
||||
Import-Module -Name "$PSScriptRoot\lib\backupscript-$($_.type).psm1"
|
||||
Backup-Create -source $source -dest $destination -name $_.name -opt $opt
|
||||
Import-Module -Name "$PSScriptRoot\lib\backupscript-$($_.type).psm1" -Force
|
||||
Backup-Create -source $source -dest $destination -name $_.name -opt $opt #-EA Stop
|
||||
if ( $_.psobject.properties.match('hook_postexec').Count -and $_.hook_postexec -ne "" ) {
|
||||
Set-Message "Postexec hook : execute $($_.hook_postexec)"
|
||||
Invoke-Expression $_.hook_postexec
|
||||
|
@ -217,8 +210,9 @@ $backup.actions | % {
|
|||
if ( Test-Path "$($net_default_letter):" ){
|
||||
Remove-PSDrive -Name $net_default_letter
|
||||
}
|
||||
|
||||
# Remove Module
|
||||
Get-Module -Name "backupscript-$($_.type)" | Remove-Module -Force
|
||||
Remove-Module -Name $_.type -Force
|
||||
}
|
||||
}
|
||||
Set-Message "Backup operation done"
|
||||
|
|
|
@ -1,64 +1,46 @@
|
|||
Write-Debug "Module Clone loaded"
|
||||
function Backup-Create () {
|
||||
Param(
|
||||
[Parameter(Mandatory=$True)]
|
||||
[string]
|
||||
$source,
|
||||
[Parameter(Mandatory=$True)]
|
||||
[string]
|
||||
$dest,
|
||||
[Parameter(Mandatory=$false)]
|
||||
[string]
|
||||
$name,
|
||||
[Parameter(Mandatory=$false)]
|
||||
[object]
|
||||
$options
|
||||
)
|
||||
|
||||
function Backup-Create () {
|
||||
Param(
|
||||
[Parameter(Mandatory=$True)][string]$source,
|
||||
[Parameter(Mandatory=$True)][string]$dest,
|
||||
[Parameter(Mandatory=$false)][string]$name,
|
||||
[Parameter(Mandatory=$false)][object]$options
|
||||
)
|
||||
$copy_opt = "--stats=0 --log-level INFO --log-format `"shorfile`" "
|
||||
Set-Message "Sync files from $source to $dest"
|
||||
|
||||
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 | % {
|
||||
if ($_ -ne ""){
|
||||
$type, $mdg = ($_ -split ':')[0]
|
||||
$msg = -join ($_ -split ':')[1..2]
|
||||
|
||||
if ( -not (Test-Path "$global:bin_path\rclone.exe") ) {
|
||||
Throw "Rclone executable not found"
|
||||
}
|
||||
|
||||
# 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]
|
||||
|
||||
switch ( $type.trim() ){
|
||||
"INFO" {
|
||||
Set-Message $msg.trim()
|
||||
}
|
||||
"NOTICE" {
|
||||
Set-Warning $msg.trim()
|
||||
}
|
||||
"ERROR" {
|
||||
Set-Error $msg.trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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"
|
||||
}
|
||||
switch ( $type.trim() ){
|
||||
"INFO" {
|
||||
Set-Message $msg.trim()
|
||||
}
|
||||
"WARN" {
|
||||
Set-Warning $msg.trim()
|
||||
}
|
||||
"ERROR" {
|
||||
Set-Error $msg.trim()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Export-ModuleMember -Function Backup-Create
|
||||
Export-ModuleMember -Function Backup-Create
|
|
@ -1,4 +1,4 @@
|
|||
Write-Debug "Utils module loaded"
|
||||
Write-Output "chargement du module"
|
||||
|
||||
function Get-LogTimeStamp {
|
||||
return (Get-Date).toString("yyyy.MM.dd HH:mm:ss")
|
||||
|
@ -16,7 +16,7 @@ function ConvertTo-CmdlineOptions {
|
|||
$sep=" "
|
||||
)
|
||||
|
||||
Write-Debug "Call ConvertTo-CmdlineOptions with $options, separator: `"$sep`""
|
||||
Write-Debug "Call parse_options with $options, separator: `"$sep`""
|
||||
$opt = ""
|
||||
if ($options -eq $false) {
|
||||
return ""
|
||||
|
@ -81,4 +81,4 @@ function Set-Message {
|
|||
}
|
||||
}
|
||||
|
||||
Export-ModuleMember -Function ConvertTo-CmdlineOptions, Set-Message, Set-Warning, Set-Error
|
||||
Export-ModuleMember -Function ConvertTo-CmdlineOptions, Set-Message, Set-Warning, Set-Error
|
Reference in a new issue