Update install-AdHoc-Backup-GUI.ps1

This commit is contained in:
Mattia Tadini 2025-11-11 15:46:09 +00:00
parent 5ca482aa46
commit 68f530e72f

View File

@ -1,14 +1,10 @@
#Requires -Version 5.1 #Requires -Version 5.1
<# <#
Installer AdHoc Backup (GUI) - v1.3.4 Installer AdHoc Backup (GUI) - v1.3.5
- Tab "Configurazione (backup.conf)" con UI dinamica (checkbox per booleani, textbox per altri valori) - Fix: editing nel tab Config -> niente più "indice null" (usa $sender.Tag per mappare il key)
- Struttura: C:\polo\scripts\bin\RClone\ C:\polo\scripts\bin\7Zip\ C:\polo\scripts\bin\conf\ - Solo 7zr.exe (nessun alias 7z.exe) in C:\polo\scripts\bin\7Zip\
- Config: C:\polo\scripts\bin\conf\backup.conf e C:\polo\scripts\bin\conf\rclone.conf - Rclone auto, pulizia ZIP, layout bin/conf
- "Installa": scarica/installa Rclone e **solo 7zr.exe** (nessun alias 7z.exe) nelle cartelle bin\ - Schedulazione via schtasks, chiusura console figlie
- Dopo estrazione elimina ZIP di Rclone
- Avvio "Configura rclone" con Start-Process diretto (no cmd.exe)
- Schedulazione giornaliera/settimanale via schtasks; AdHoc-Backup.ps1 avviato con -Config <bin\conf\backup.conf>
- Chiusura di tutte le console aperte dallinstaller alla chiusura della finestra
#> #>
Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Windows.Forms
@ -146,7 +142,7 @@ $global:ChildPids = New-Object System.Collections.ArrayList
function Track-Child($p){ if ($p -and $p.Id) { [void]$global:ChildPids.Add($p.Id) } } function Track-Child($p){ if ($p -and $p.Id) { [void]$global:ChildPids.Add($p.Id) } }
$global:ConfUi = @{ $global:ConfUi = @{
Map = $null Map = [ordered]@{}
Order = @() Order = @()
Controls = @{} Controls = @{}
SourceLines = @() SourceLines = @()
@ -174,6 +170,7 @@ function Parse-BackupConf {
} }
function Save-BackupConf { param([Parameter(Mandatory)][string]$Path) function Save-BackupConf { param([Parameter(Mandatory)][string]$Path)
if (-not $global:ConfUi.Map) { throw "Mappa configurazione non inizializzata." }
$out = New-Object System.Collections.Generic.List[string] $out = New-Object System.Collections.Generic.List[string]
foreach ($entry in $global:ConfUi.Order){ foreach ($entry in $global:ConfUi.Order){
if ($entry.type -eq 'kv'){ if ($entry.type -eq 'kv'){
@ -261,18 +258,36 @@ function Build-ConfigUI {
$cfgPanel.Controls.Clear(); $global:ConfUi.Controls = @{} $cfgPanel.Controls.Clear(); $global:ConfUi.Controls = @{}
$xLabel=10; $xCtrl=260; $y=10; $h=24 $xLabel=10; $xCtrl=260; $y=10; $h=24
foreach ($k in $global:ConfUi.Map.Keys) { foreach ($k in $global:ConfUi.Map.Keys) {
$v = $global:ConfUi.Map[$k] $key = [string]$k # copia locale e forte tipizzazione
$lbl = New-Object System.Windows.Forms.Label; $lbl.Text=$k; Set-Loc $lbl $xLabel ($y+4); Set-Sz $lbl 240 $h; $cfgPanel.Controls.Add($lbl) $v = $global:ConfUi.Map[$key]
$lbl = New-Object System.Windows.Forms.Label; $lbl.Text=$key; $lbl.Tag=$key; Set-Loc $lbl $xLabel ($y+4); Set-Sz $lbl 240 $h; $cfgPanel.Controls.Add($lbl)
if (Is-BoolString $v) { if (Is-BoolString $v) {
$chk = New-Object System.Windows.Forms.CheckBox $chk = New-Object System.Windows.Forms.CheckBox
$chk.Tag = $key
$chk.Checked = (('1','true','yes','y') -contains ($v.ToString().ToLower())) $chk.Checked = (('1','true','yes','y') -contains ($v.ToString().ToLower()))
Set-Loc $chk $xCtrl ($y+2); Set-Sz $chk 20 $h Set-Loc $chk $xCtrl ($y+2); Set-Sz $chk 20 $h
$chk.Add_CheckedChanged({ $global:ConfUi.Map[$k] = if ($chk.Checked) { 'true' } else { 'false' } }) $chk.add_CheckedChanged({ param($sender,$args)
$cfgPanel.Controls.Add($chk); $global:ConfUi.Controls[$k]=$chk try {
$k2 = [string]$sender.Tag
if (-not [string]::IsNullOrEmpty($k2)) {
$global:ConfUi.Map[$k2] = if ($sender.Checked) { 'true' } else { 'false' }
}
} catch { Write-Log "Update booleano fallito: $($_.Exception.Message)" 'WARN' }
})
$cfgPanel.Controls.Add($chk); $global:ConfUi.Controls[$key]=$chk
} else { } else {
$tb = New-Object System.Windows.Forms.TextBox; $tb.Text=$v; Set-Loc $tb $xCtrl $y; Set-Sz $tb 540 $h $tb = New-Object System.Windows.Forms.TextBox
$tb.Add_TextChanged({ $global:ConfUi.Map[$k] = $tb.Text }) $tb.Tag = $key
$cfgPanel.Controls.Add($tb); $global:ConfUi.Controls[$k]=$tb $tb.Text=$v; Set-Loc $tb $xCtrl $y; Set-Sz $tb 540 $h
$tb.add_TextChanged({ param($sender,$args)
try {
$k2 = [string]$sender.Tag
if (-not [string]::IsNullOrEmpty($k2)) {
$global:ConfUi.Map[$k2] = $sender.Text
}
} catch { Write-Log "Update testo fallito: $($_.Exception.Message)" 'WARN' }
})
$cfgPanel.Controls.Add($tb); $global:ConfUi.Controls[$key]=$tb
} }
$y += 28 $y += 28
} }