Update AdHoc-Backup.ps1
This commit is contained in:
parent
b4f7eb8c3c
commit
03e75966c0
@ -1,11 +1,21 @@
|
|||||||
<#
|
<#
|
||||||
Backup_AdHoc_rclone_mail.ps1
|
Backup_AdHoc_rclone_mail_fixed_v3_fix26.ps1
|
||||||
|
Fix:
|
||||||
|
- PowerShell è case-insensitive: le variabili locali "$files" sovrascrivevano "$Files" (hashtable globale).
|
||||||
|
Rinominati i locali in "$outFiles" e, in Write-Log, uso esplicito di $script:Files.Log per evitare collisioni.
|
||||||
|
- Ordine operazioni: upload da \out, poi MOVE/DELETE, come fix25.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
#Requires -Version 5.1
|
#Requires -Version 5.1
|
||||||
Set-StrictMode -Version Latest
|
Set-StrictMode -Version Latest
|
||||||
$ErrorActionPreference = 'Stop'
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
|
||||||
|
param(
|
||||||
|
[string]$Config,
|
||||||
|
[switch]$Quiet
|
||||||
|
)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
|
||||||
} catch {
|
} catch {
|
||||||
@ -16,11 +26,25 @@ try {
|
|||||||
|
|
||||||
$ScriptPath = $MyInvocation.MyCommand.Path
|
$ScriptPath = $MyInvocation.MyCommand.Path
|
||||||
$ScriptDir = Split-Path -Parent $ScriptPath
|
$ScriptDir = Split-Path -Parent $ScriptPath
|
||||||
$ConfPath = Join-Path $ScriptDir 'backup.conf'
|
|
||||||
|
# Se passato da riga di comando (es. dalla GUI), usa quello.
|
||||||
|
# Altrimenti prova prima bin\conf\backup.conf vicino allo script, poi fallback a .\backup.conf
|
||||||
|
if ($PSBoundParameters.ContainsKey('Config') -and -not [string]::IsNullOrWhiteSpace($Config)) {
|
||||||
|
$ConfPath = $Config
|
||||||
|
} else {
|
||||||
|
$cand = @(
|
||||||
|
(Join-Path $ScriptDir 'bin\conf\backup.conf'),
|
||||||
|
(Join-Path $ScriptDir 'backup.conf')
|
||||||
|
)
|
||||||
|
$found = $null
|
||||||
|
foreach ($c in $cand) { if (Test-Path -LiteralPath $c) { $found = $c; break } }
|
||||||
|
if ($found) { $ConfPath = $found } else { $ConfPath = Join-Path $ScriptDir 'backup.conf' }
|
||||||
|
}
|
||||||
|
|
||||||
#endregion ==========================================================================
|
#endregion ==========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region ============================= Config loader =================================
|
#region ============================= Config loader =================================
|
||||||
|
|
||||||
function New-BackupConfTemplate {
|
function New-BackupConfTemplate {
|
||||||
@ -187,6 +211,15 @@ Load-Config -Path $ConfPath
|
|||||||
#endregion ==========================================================================
|
#endregion ==========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function Find-FirstExisting {
|
||||||
|
param([Parameter(Mandatory)][string[]]$Candidates)
|
||||||
|
foreach ($p in $Candidates) {
|
||||||
|
if (-not [string]::IsNullOrWhiteSpace($p) -and (Test-Path -LiteralPath $p)) { return $p }
|
||||||
|
}
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
#region ============================= Paths, Globals ================================
|
#region ============================= Paths, Globals ================================
|
||||||
|
|
||||||
function Now-IT { (Get-Date).ToString('dd-MM-yyyy HH:mm:ss') }
|
function Now-IT { (Get-Date).ToString('dd-MM-yyyy HH:mm:ss') }
|
||||||
@ -194,11 +227,21 @@ function Now-IT { (Get-Date).ToString('dd-MM-yyyy HH:mm:ss') }
|
|||||||
$DateStamp = (Get-Date).ToString('yyyyMMdd_HHmmss')
|
$DateStamp = (Get-Date).ToString('yyyyMMdd_HHmmss')
|
||||||
$HostName = $env:COMPUTERNAME
|
$HostName = $env:COMPUTERNAME
|
||||||
|
|
||||||
|
|
||||||
|
$InstallBin = Join-Path $ScriptDir 'bin'
|
||||||
|
|
||||||
|
# Scegli il layout preferendo quello dell'Installer (.\bin\*) se presente
|
||||||
|
$prefBin = if (Test-Path -LiteralPath $InstallBin) { $InstallBin } else { Join-Path $BackupRoot 'Bin' }
|
||||||
|
$prefBin7z = if (Test-Path -LiteralPath (Join-Path $InstallBin '7Zip')) { Join-Path $InstallBin '7Zip' } else { Join-Path $BackupRoot 'Bin\7Zip' }
|
||||||
|
$prefRclone = if (Test-Path -LiteralPath (Join-Path $InstallBin 'RClone')) { Join-Path $InstallBin 'RClone' } else {
|
||||||
|
if (Test-Path -LiteralPath (Join-Path $BackupRoot 'Bin\RClone')) { Join-Path $BackupRoot 'Bin\RClone' } else { Join-Path $BackupRoot 'RClone' }
|
||||||
|
}
|
||||||
|
|
||||||
$Paths = [ordered]@{
|
$Paths = [ordered]@{
|
||||||
Root = $BackupRoot
|
Root = $BackupRoot
|
||||||
Bin = Join-Path $BackupRoot 'Bin'
|
Bin = $prefBin
|
||||||
Bin7z = Join-Path $BackupRoot 'Bin\7zip'
|
Bin7z = $prefBin7z
|
||||||
BinRclone = Join-Path $BackupRoot 'Bin\RClone'
|
BinRclone = $prefRclone
|
||||||
Logs = Join-Path $BackupRoot 'logs'
|
Logs = Join-Path $BackupRoot 'logs'
|
||||||
Out = Join-Path $BackupRoot 'out'
|
Out = Join-Path $BackupRoot 'out'
|
||||||
SqlStage = Join-Path $BackupRoot '_sql_stage'
|
SqlStage = Join-Path $BackupRoot '_sql_stage'
|
||||||
@ -206,15 +249,44 @@ $Paths = [ordered]@{
|
|||||||
StoreDb = Join-Path $BackupRoot 'Databases'
|
StoreDb = Join-Path $BackupRoot 'Databases'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Candidati per rclone.exe e rclone.conf
|
||||||
|
$rcExeCand = @(
|
||||||
|
(Join-Path $Paths.BinRclone 'rclone.exe'),
|
||||||
|
(Join-Path (Join-Path $BackupRoot 'RClone') 'rclone.exe')
|
||||||
|
)
|
||||||
|
$rcConfCand = @(
|
||||||
|
$null, # 1) accanto a rclone.exe (se già presente)
|
||||||
|
(Join-Path $InstallBin 'conf\rclone.conf'), # 2) conf vicino allo script (Installer GUI)
|
||||||
|
(Join-Path $Paths.Bin 'conf\rclone.conf'), # 3) conf sotto BackupRoot\Bin
|
||||||
|
(Join-Path (Join-Path $env:APPDATA 'rclone') 'rclone.conf') # 4) profilo utente standard
|
||||||
|
)
|
||||||
|
|
||||||
|
$sevenExeCand = @(
|
||||||
|
(Join-Path $Paths.Bin7z '7z.exe'),
|
||||||
|
(Join-Path $Paths.Bin7z '7zr.exe')
|
||||||
|
)
|
||||||
|
|
||||||
$Files = [ordered]@{
|
$Files = [ordered]@{
|
||||||
Log = Join-Path $Paths.Logs ("backup_$DateStamp.log")
|
Log = Join-Path $Paths.Logs ("backup_$DateStamp.log")
|
||||||
SevenZipExe = Join-Path $Paths.Bin7z '7z.exe'
|
SevenZipExe = Find-FirstExisting $sevenExeCand
|
||||||
SevenZip7zr = Join-Path $Paths.Bin7z '7zr.exe'
|
SevenZip7zr = Join-Path $Paths.Bin7z '7zr.exe'
|
||||||
RcloneExe = Join-Path $Paths.BinRclone 'rclone.exe'
|
RcloneExe = Find-FirstExisting $rcExeCand
|
||||||
RcloneZip = Join-Path $Paths.BinRclone 'rclone-current-windows-amd64.zip'
|
RcloneZip = Join-Path $Paths.BinRclone 'rclone-current-windows-amd64.zip'
|
||||||
RcloneConf = Join-Path $Paths.BinRclone 'rclone.conf'
|
RcloneConf = $null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Se rclone.exe esiste già, prova prima rclone.conf nella stessa cartella
|
||||||
|
if ($Files.RcloneExe) {
|
||||||
|
$rcFolder = Split-Path -Parent $Files.RcloneExe
|
||||||
|
$rcConfSide = Join-Path $rcFolder 'rclone.conf'
|
||||||
|
$rcConfCand[0] = $rcConfSide
|
||||||
|
}
|
||||||
|
$Files.RcloneConf = Find-FirstExisting $rcConfCand
|
||||||
|
if (-not $Files.RcloneConf) {
|
||||||
|
# Fallback: tienilo fianco a rclone.exe
|
||||||
|
if (-not $Files.RcloneExe) { $Files.RcloneExe = Join-Path $Paths.BinRclone 'rclone.exe' }
|
||||||
|
$Files.RcloneConf = Join-Path (Split-Path -Parent $Files.RcloneExe) 'rclone.conf'
|
||||||
|
}
|
||||||
#endregion ==========================================================================
|
#endregion ==========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user