diff --git a/backup.ps1 b/backup.ps1 index dbd8b71..15d6b7e 100644 --- a/backup.ps1 +++ b/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" diff --git a/lib/backupscript-clone.psm1 b/lib/backupscript-clone.psm1 index 49ec070..985d4fb 100644 --- a/lib/backupscript-clone.psm1 +++ b/lib/backupscript-clone.psm1 @@ -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 \ No newline at end of file diff --git a/lib/backupscript-global_utils.psm1 b/lib/backupscript-global_utils.psm1 index 04a3200..c8d47d6 100644 --- a/lib/backupscript-global_utils.psm1 +++ b/lib/backupscript-global_utils.psm1 @@ -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 \ No newline at end of file