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
<#
Installer AdHoc Backup (GUI) - v1.3.4
- Tab "Configurazione (backup.conf)" con UI dinamica (checkbox per booleani, textbox per altri valori)
- Struttura: C:\polo\scripts\bin\RClone\ C:\polo\scripts\bin\7Zip\ C:\polo\scripts\bin\conf\
- Config: C:\polo\scripts\bin\conf\backup.conf e C:\polo\scripts\bin\conf\rclone.conf
- "Installa": scarica/installa Rclone e **solo 7zr.exe** (nessun alias 7z.exe) nelle cartelle bin\
- 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
Installer AdHoc Backup (GUI) - v1.3.5
- Fix: editing nel tab Config -> niente più "indice null" (usa $sender.Tag per mappare il key)
- Solo 7zr.exe (nessun alias 7z.exe) in C:\polo\scripts\bin\7Zip\
- Rclone auto, pulizia ZIP, layout bin/conf
- Schedulazione via schtasks, chiusura console figlie
#>
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) } }
$global:ConfUi = @{
Map = $null
Map = [ordered]@{}
Order = @()
Controls = @{}
SourceLines = @()
@ -174,6 +170,7 @@ function Parse-BackupConf {
}
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]
foreach ($entry in $global:ConfUi.Order){
if ($entry.type -eq 'kv'){
@ -261,18 +258,36 @@ function Build-ConfigUI {
$cfgPanel.Controls.Clear(); $global:ConfUi.Controls = @{}
$xLabel=10; $xCtrl=260; $y=10; $h=24
foreach ($k in $global:ConfUi.Map.Keys) {
$v = $global:ConfUi.Map[$k]
$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)
$key = [string]$k # copia locale e forte tipizzazione
$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) {
$chk = New-Object System.Windows.Forms.CheckBox
$chk.Tag = $key
$chk.Checked = (('1','true','yes','y') -contains ($v.ToString().ToLower()))
Set-Loc $chk $xCtrl ($y+2); Set-Sz $chk 20 $h
$chk.Add_CheckedChanged({ $global:ConfUi.Map[$k] = if ($chk.Checked) { 'true' } else { 'false' } })
$cfgPanel.Controls.Add($chk); $global:ConfUi.Controls[$k]=$chk
$chk.add_CheckedChanged({ param($sender,$args)
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 {
$tb = New-Object System.Windows.Forms.TextBox; $tb.Text=$v; Set-Loc $tb $xCtrl $y; Set-Sz $tb 540 $h
$tb.Add_TextChanged({ $global:ConfUi.Map[$k] = $tb.Text })
$cfgPanel.Controls.Add($tb); $global:ConfUi.Controls[$k]=$tb
$tb = New-Object System.Windows.Forms.TextBox
$tb.Tag = $key
$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
}