Script per il backup di AdHoc, include cartelle, Databases, invio su DropBox, GDrive, etc... Invio mail esito backups
Go to file
2025-11-24 07:52:56 +00:00
AdHoc-Backup.ps1 Update AdHoc-Backup.ps1 2025-11-19 12:20:59 +00:00
backup.conf Update backup.conf 2025-11-12 10:41:24 +00:00
install-AdHoc-Backup-GUI.ps1 Update install-AdHoc-Backup-GUI.ps1 2025-11-19 16:16:58 +00:00
readme.md Add readme.md 2025-11-21 11:04:20 +00:00
report_template.html Update report_template.html 2025-11-19 11:27:09 +00:00
send-mail.ps1 Update send-mail.ps1 2025-11-24 07:52:56 +00:00

Manuale operativo AdHoc Backup (GUI + Script)

Versione script GUI: install-AdHoc-Backup-GUI.ps1
Motore di backup: AdHoc-Backup.ps1
Configurazione: backup.conf
Report email: send-mail.ps1 + report_template.html


1. Obiettivo del progetto

Questo pacchetto serve a:

  • fare backup automatici di:
    • cartelle/file (es. installazione Zucchetti AdHoc)
    • database SQL Server
  • mantenere copie locali con retention automatica
  • inviare gli archivi verso uno storage remoto (Dropbox, S3, ecc.) tramite rclone
  • inviare una mail HTML di report con:
    • esito (OK / WARNING / ERRORE)
    • dimensioni archivi
    • durata del backup
    • spazio disco totale/usato/libero
  • semplificare tutto tramite una GUI di installazione che:
    • scarica e posiziona i file giusti
    • prepara la struttura delle cartelle
    • configura lattività pianificata di Windows
    • offre un pulsante “Test mail”

2. Componenti del sistema

I file principali sono:

  • install-AdHoc-Backup-GUI.ps1
    GUI/installer: scarica e installa gli script, prepara i tool (7-Zip e rclone) e crea la Scheduled Task.

  • AdHoc-Backup.ps1
    Motore di backup: legge backup.conf, esegue backup file e SQL, comprime con 7-Zip, invia con rclone, pulisce e manda la mail di report.

  • backup.conf
    File di configurazione utente: definisce cosa salvare, dove salvare, retention, parametri rclone e parametri SMTP.

  • send-mail.ps1
    Si occupa di costruire lHTML del report (usando report_template.html) e inviare la mail via SMTP/TLS.

  • report_template.html
    Template HTML del report: contiene segnaposto (placeholder) che send-mail.ps1 sostituisce con i dati reali del backup.


3. Esecuzione rapida (one-liner)

Per lanciare linstaller senza scaricare nulla a mano:

powershell
irm "https://gitea.poloinformatico.it/Mattia/Backup-AdHoc/raw/branch/main/install-AdHoc-Backup-GUI.ps1" | iex

3.1 Cosa fa questo comando

  • irm = alias di Invoke-RestMethod
    Scarica il contenuto del file PowerShell da Gitea come testo.
  • | = pipe
    Passa il testo scaricato al comando successivo.
  • iex = alias di Invoke-Expression
    Esegue il testo come script PowerShell in memoria.

Nota importante

Lerrore:

Impossibile trovare un parametro posizionale che accetta l'argomento 'iex'

si verifica se manca la pipe |.
La forma corretta è sempre:

powershell
irm "URL" | iex

3.2 Come usarlo in pratica

  1. Apri PowerShell come Amministratore (consigliato, per creare attività pianificate e scrivere in C:\polo).

  2. Copia e incolla il comando:

    powershell
    irm "https://gitea.poloinformatico.it/Mattia/Backup-AdHoc/raw/branch/main/install-AdHoc-Backup-GUI.ps1" | iex
    
  3. Premi Invio.
    Dopo pochi secondi si apre la finestra GUI “Installer AdHoc Backup”.

Da qui prosegui con la configurazione grafica descritta nei capitoli successivi.


4. Struttura delle cartelle e layout standard

Linstaller GUI si aspetta e/o prepara un layout tipo.

4.1 Cartella di installazione degli script

Esempio predefinito:

  • C:\polo\scripts\
    • AdHoc-Backup.ps1
    • send-mail.ps1
    • backup.conf (se non spostato in bin\conf)
    • bin\
      • conf\
        • backup.conf
        • rclone.conf
        • report_template.html
      • RClone\
        • rclone.exe
      • 7Zip\
        • 7zr.exe (o 7z.exe se presente)

4.2 Cartella radice dei backup

Definita in backup.conf, es.:

  • C:\Backups_AdHoc\
    • Bin\ (eventuali tool portabili usati da qui)
    • logs\
      • backup_yyyy-MM-dd_HHmmss.log
    • out\
      Archivi temporanei prima di upload/spostamento.
    • _sql_stage\
      File .bak e script SQL temporanei.
    • Files\
      Archivi file, se KeepLocalArchives=true.
    • Databases\
      Archivi SQL, se KeepLocalArchives=true.

5. Linstaller GUI install-AdHoc-Backup-GUI.ps1

5.1 Cosa fa in sintesi

Linstaller:

  1. Mostra una finestra WinForms con:
    • percorso di installazione
    • URL dei file da scaricare
    • opzioni di schedulazione
    • opzioni di log/output
    • area di configurazione di backup.conf
    • pulsante per Test mail
    • pulsante per Installa
  2. Scarica e posiziona:
    • AdHoc-Backup.ps1
    • backup.conf
    • send-mail.ps1
    • report_template.html
  3. Prepara il layout:
    • bin\conf
    • bin\RClone
    • bin\7Zip
  4. Installa automaticamente, se mancanti:
    • rclone.exe (portabile)
    • 7zr.exe (versione minimale di 7-Zip)
  5. Crea una attività pianificata (Scheduled Task) per eseguire il backup a orario/frequenza desiderati.
  6. Opzionale: esegue subito il backup alla chiusura della GUI se selezioni lapposita checkbox.

5.2 Campi principali della GUI

(I nomi possono variare leggermente, ma il concetto resta lo stesso.)

5.2.1 Cartella di installazione

  • Label: “Cartella di installazione”
  • TextBox: percorso (default es. C:\polo\scripts)
  • Pulsante: “Scegli…” per aprire un FolderBrowserDialog

Qui verranno salvati gli script (AdHoc-Backup.ps1, send-mail.ps1, ecc.).

5.2.2 URL script / config / template

  • URL script AdHoc-Backup.ps1
  • URL backup.conf
  • URL send-mail.ps1
  • URL report_template.html

Sono precompilati con le URL raw di Gitea.
Puoi cambiarli se vuoi puntare ad un tuo fork/branch.

5.2.3 Opzioni generali

  • “Crea attività pianificata senza output (quiet)”
    Se spuntata, la Scheduled Task esegue AdHoc-Backup.ps1 con parametro -Quiet (niente log su console, solo su file).

  • “Eseguire il backup subito dopo linstallazione (alla chiusura)”
    Se spuntata:

    • alla chiusura della GUI linstaller lancia immediatamente AdHoc-Backup.ps1 con la config scelta;
    • se non spuntata, non parte nessun backup automatico alla chiusura.

5.2.4 Schedulazione (Utilità di pianificazione)

  • Checkbox “Crea attività pianificata”
    • se disabilitata, linstaller non crea alcun job nel Task Scheduler.
  • Combobox “Frequenza”
    • valori: “Giornaliero”, “Settimanale”.
  • Combobox “Giorno”
    • attivo solo se scegli “Settimanale”.
    • valori: “Lunedì (MON)”, “Martedì (TUE)”, ecc.
  • Campo “Ora”
    • DateTimePicker solo ora/minuti (es. default 23:00).
  • Campo “Nome attività”
    • default per es.: Backup_AdHoc.

Internamente la GUI usa New-ScheduledTaskAction/Trigger/Principal e Register-ScheduledTask per creare lattività con privilegi elevati e, se richiesto, con argomenti -Config e -Quiet.

5.2.5 Parametri extra per AdHoc-Backup.ps1

  • TextBox per specificare argomenti aggiuntivi da passare allo script, ad es.:

    -Quiet
    -Config "C:\percorso\altro.conf"
    

Questi argomenti vengono aggiunti alla stringa della Scheduled Task.

5.2.6 Area di configurazione backup.conf

Nella parte centrale/bassa la GUI:

  • legge backup.conf usando un parser che:
    • mantiene intatti commenti, spazi, tab, ordine delle righe;
    • memorizza i soli valori associati alle chiavi.
  • genera controlli (TextBox / CheckBox) per i parametri principali (es. BackupRoot, ArchiveSources, EnableSqlBackup, ecc.).

Quando salvi:

  • riscrive solo i valori nel file, lasciando la formattazione esistente invariata.

Questo ti permette di modificare la config senza “rovinare” il file.

5.2.7 Pulsante “Test mail”

  • Rilegge la config (in particolare le variabili Mail*).
  • Costruisce un body di test.
  • richiama send-mail.ps1 per verificare:
    • connessione SMTP (MailSmtpHost, MailSmtpPort);
    • credenziali (MailUser, MailPassword);
    • correttezza di mittente/destinatari.

5.2.8 Pulsanti finali

  • “Installa”

    • scarica i file dagli URL indicati;
    • prepara le cartelle bin, conf, RClone, 7Zip;
    • installa rclone/7zr se mancanti;
    • salva backup.conf (se modificato);
    • crea o aggiorna la Scheduled Task (se abilitata).
  • “Chiudi”

    • chiude la GUI;
    • se la checkbox “Eseguire il backup subito dopo linstallazione” è spuntata:
      • lancia immediatamente AdHoc-Backup.ps1 con il backup.conf configurato.

6. La configurazione backup.conf

backup.conf è un file testo CHIAVE=valore con commenti # ....

Lo script:

  • ignora righe vuote o che iniziano per # / ;;
  • espande variabili di ambiente (es. %COMPUTERNAME%);
  • gestisce le liste separate da |.

6.1 Sezione base e retention

Parametri principali:

  • BackupRoot=
    Cartella radice dei backup (logs, out, Files, Databases, _sql_stage, ecc.).

  • LocalRetentionDaysFiles=
    Giorni di retention per gli archivi file in Files\.

  • LocalRetentionDaysDb=
    Giorni di retention per gli archivi DB in Databases\.

  • RemoteRetentionDays=
    Giorni dopo i quali rclone elimina i file sul remoto (via rclone delete --min-age).

  • KeepLocalArchives= (true / false)

    • true: a fine job gli archivi in out\ vengono spostati in Files\ / Databases\.
    • false: gli archivi in out\ vengono eliminati (dopo lupload).
  • EnableFileBackup= (true / false)
    Abilita/disabilita il backup delle sorgenti file/folder.

  • EnableRcloneUpload= (true / false)
    Abilita/disabilita lupload verso lo storage remoto.

6.2 Sorgenti file

  • ArchiveSources=
    Lista di cartelle o share da includere, separate da |.

Esempio:

ArchiveSources=C:\Zucchetti\ahr90|C:\Zucchetti\NetSetup

Lo script:

  • rimuove eventuali virgolette;
  • ignora percorsi inesistenti (loggando un WARN);
  • deduplica i percorsi.

6.3 Backup SQL Server

Parametri principali:

  • EnableSqlBackup= (true / false)
    Attiva o meno la parte SQL.

  • SqlInstance=
    Istanza SQL Server, es.:

    • localhost
    • .\SQLEXPRESS
    • localhost\SQLEXPRESS2022
    • 192.168.1.10,1433 (server remoto su porta esplicita)
  • SqlUseWindowsAuth= (true / false)

    • true: usa Windows Authentication (utente con cui gira il processo).
    • false: usa utente/password SQL esplicitati.
  • SqlUser=, SqlPassword=
    Utilizzati solo se SqlUseWindowsAuth=false.

  • DbInclude=
    Lista di database da includere esplicitamente (separati da |).

    Se vuoto, lo script:

    1. chiede a SQL lelenco dei DB utente online (sys.databases con state=0 e database_id>4);
    2. li filtra usando DbExclude.
  • DbExclude=
    Lista di DB da escludere (default include master|model|msdb|tempdb).

  • SqlCompressStage= (true / false)
    Se true:

    • comprime _sql_stage\ in un archivio SQL_HOST_DATASTAMP.7z nella cartella out\;
    • eventuali .bak possono essere rimossi (vedi sotto).
  • SqlDropBakAfterZip= (true / false)
    Se true:

    • dopo la compressione, elimina i .bak da _sql_stage\ (riduce lo spazio occupato dalla staging).

6.4 7-Zip

  • SevenZipCompressionLevel= (09)
    • 0 = store (niente compressione);
    • 3 = compromesso veloce;
    • 79 = compressione più forte ma lenta, sconsigliata per DB molto grandi.

Lo script usa 7zr.exe o 7z.exe e gestisce automaticamente i codici di ritorno:

  • ExitCode=0 → OK
  • ExitCode=1 → WARNING (non blocca il job, ma segna un warning e lesito diventa “COMPLETATO CON WARNING”)
  • altri codici → errore (solleva eccezione).

6.5 rclone

Parametri principali:

  • RcloneRemoteDest=
    Percorso remoto in formato REMOTE:percorso, es.:

    RcloneRemoteDest=dropbox:/Backups_AdHoc/%COMPUTERNAME%
    

    Dove:

    • REMOTE è il nome configurato in rclone.conf;
    • %COMPUTERNAME% viene espansa con il nome del server.
  • RcloneBwl=
    Limitazione di banda, es. 10M per 10 MB/s. Vuoto = nessun limite.

  • RcloneExtraArgs=
    Lista di argomenti rclone extra, separati da |, ad esempio:

    --s3-chunk-size=64M|--s3-upload-concurrency=4|--fast-list
    

Lo script usa:

  • rclone copyto per caricare ogni singolo archivio;
  • rclone delete + rclone rmdirs per applicare la retention sul remoto.

Se manca rclone.conf, viene aperta una PowerShell con rclone config --config <percorso> per configurare almeno un remote.
In questo caso lo script si ferma dopo aver lanciato la configurazione, con un messaggio chiaro.

6.6 Email

Parametri:

  • MailEnabled= (true / false)
  • MailSmtpHost=
  • MailSmtpPort= (es. 587)
  • MailUseAuth= (true / false)
  • MailUser=
  • MailPassword=
  • MailFrom=
  • MailTo= (uno o più destinatari separati da |)
  • MailSubjectPref=
    Prefisso per loggetto, es.: [BACKUP ADHOC].

send-mail.ps1 usa queste variabili per costruire la connessione SMTP con TLS e inviare la mail di report.


7. Il motore di backup AdHoc-Backup.ps1

7.1 Avvio e parametri

Lo script accetta:

  • -Config
    Percorso del file backup.conf da usare.
  • -Quiet
    Non stampa nulla su console, scrive solo sul file log.

Ricerca il file di configurazione in questa priorità:

  1. se passi -Config, usa quello (se esiste, altrimenti errore);
  2. se trova .\bin\conf\backup.conf (layout installer), usa quello;
  3. altrimenti cerca backup.conf nella stessa cartella dello script.

7.2 Lettura config e variabili script

La funzione Load-Config:

  1. legge riga per riga backup.conf;
  2. popola una serie di variabili di scope script, ad esempio:
    • $BackupRoot
    • $ArchiveSources
    • $EnableFileBackup
    • $EnableSqlBackup
    • $SqlInstance, $SqlUseWindowsAuth, $SqlUser, $SqlPassword
    • $DbInclude, $DbExclude
    • $SqlCompressStage, $SqlDropBakAfterZip
    • $SevenZipCompressionLevel
    • $EnableRcloneUpload
    • $RcloneRemoteDest, $RcloneBwl, $RcloneExtraArgs
    • $KeepLocalArchives
    • $LocalRetentionDaysFiles, $LocalRetentionDaysDb, $RemoteRetentionDays
    • $MailEnabled, $MailSmtpHost, $MailSmtpPort, $MailUseAuth
    • $MailUser, $MailPassword, $MailFrom, $MailTo, $MailSubjectPref

Se manca un parametro obbligatorio (es. BackupRoot, SqlInstance con SQL attivo, credenziali quando richieste), lo script solleva un errore e termina in modo controllato.

7.3 Inizializzazione percorsi e log

Lo script costruisce:

  • $Paths (oggetto ordinato con Root/Bin/Logs/Out/SqlStage/Files/Databases)
  • $Files (percorsi di SevenZipExe, SevenZip7zr, RcloneExe, RcloneConf, file log)

Crea (se mancanti) tutte le cartelle:

  • root backup
  • Bin, Bin\7Zip, Bin\RClone
  • logs, out, _sql_stage, Files, Databases

Genera un log file, ad esempio:

C:\Backups_AdHoc\logs\backup_2025-11-19_090224.log

e definisce una funzione di logging che scrive su:

  • console (a meno che -Quiet);
  • file log.

7.4 Gestione 7-Zip

  • Ensure-7Zip:

    • controlla se esistono 7z.exe o 7zr.exe (prima prova nel layout GUI, poi in BackupRoot\Bin\7Zip);
    • se assente, scarica 7zr.exe da 7-Zip e lo salva nella cartella corretta.
  • Invoke-7ZipArchive:

    • costruisce gli argomenti corretti (in base a 7z/7zr);
    • usa parametri non interattivi (-y, -bd, ecc.);
    • controlla $LASTEXITCODE:
      • 0 → log “OK”;
      • 1 → log “WARNING”, non blocca il job;
      • altri valori → solleva eccezione.

7.5 Gestione rclone

  • Ensure-Rclone:

    • se rclone.exe non esiste, scarica lo zip ufficiale dal sito rclone;
    • lo estrae, trova rclone.exe, lo copia in Bin\RClone;
    • pulisce le cartelle temporanee.
  • Ensure-RcloneConfigOrLaunch:

    • se manca rclone.conf:
      • apre una PowerShell con rclone config --config <percorso>;
      • mostra istruzioni chiare nel log;
      • termina il job con un errore esplicito.
  • Invoke-RcloneCopyTo:

    • esegue rclone copyto con:
      • --config rclone.conf;
      • opzioni standard (--transfers, --checkers, --retries, ecc.);
      • eventuale --bwlimit derivato da RcloneBwl;
      • argomenti extra da RcloneExtraArgs.
  • Apply-RemoteRetention:

    • se RemoteRetentionDays >= 0 e upload abilitato:
      • esegue rclone delete con --min-age;
      • esegue rclone rmdirs per eliminare cartelle vuote.

7.6 Backup SQL Server

Funzioni principali:

  • Resolve-Sqlcmd
    Cerca sqlcmd.exe nel PATH e in percorsi standard di installazione SQL Server.

  • Build-SqlcmdArgs / Log-SqlcmdArgsSafe
    Preparano gli argomenti per sqlcmd, mascherando la password nella versione loggata.

  • Get-OnlineUserDatabases
    Recupera lelenco dei DB utente online (sys.databases), escludendo i system DB (master, model, msdb, tempdb).

  • Backup-SqlDatabases:

    1. Assicura lesistenza di _sql_stage\ e tenta di assegnare permessi Modify a Everyone, per evitare problemi quando SQL scrive i .bak con account di servizio.
    2. Trova sqlcmd.exe; se assente → errore.
    3. Determina dbList in base a DbInclude/DbExclude.
    4. Per ogni DB:
      • produce script .sql di backup;
      • lancia sqlcmd per eseguire il BACKUP DATABASE su un .bak in _sql_stage\;
      • verifica lesistenza del file .bak.
    5. Se SqlCompressStage=true:
      • comprime _sql_stage\ in SQL_HOST_DATASTAMP.7z dentro out\;
      • se SqlDropBakAfterZip=true, cancella i .bak.
    6. Ritorna il percorso dellarchivio SQL oppure null se non creato.

7.7 Archiviazione file/folder

  • Archive-FileSources:
    • normalizza e verifica tutte le sorgenti di ArchiveSources;
    • crea un archivio tipo FILES_HOST_DATASTAMP.7z in out\;
    • ritorna il percorso dellarchivio o null se nessuna sorgente è valida.

7.8 Gestione cartella out\ e copie locali

  • Get-OutFiles
    Restituisce tutti i file presenti in out\.

  • Move-OutFiles-ToStores
    Sposta gli archivi:

    • quelli con nome che inizia per FILES_ in Files\;
    • gli altri (SQL) in Databases\.
  • Delete-OutFiles / Empty-OutFolder
    Eliminano i file e/o eventuali sottocartelle in out\.

7.9 Retention locale

  • Apply-LocalArchivesRetention
    Per ogni file in Files\ e Databases\ più vecchio di LocalRetentionDaysFiles/LocalRetentionDaysDb:

    • prova a cancellarlo;
    • logga sia successi che errori.
  • Apply-GenericRetention
    Applica retention generica su:

    • logs\
    • _sql_stage\

    cancellando file più vecchi di RetentionDays.

7.10 Flusso MAIN (riassunto)

In modo semplificato:

  1. Crea tutte le cartelle necessarie.
  2. Scrive nel log i parametri principali (root, retention, ecc.).
  3. Inizia a costruire una stringa di riepilogo con:
    • hostname
    • data/ora di start
    • dettagli che verranno aggiunti via via.
  4. Prepara i tool:
    • se servono archivi (EnableFileBackup o SQL compresso), chiama Ensure-7Zip;
    • se EnableRcloneUpload=true, chiama Ensure-Rclone e Ensure-RcloneConfigOrLaunch.
  5. Se EnableSqlBackup=true:
    • esegue Backup-SqlDatabases;
    • aggiunge al riepilogo il percorso dellarchivio SQL (se presente).
  6. Se EnableFileBackup=true:
    • esegue Archive-FileSources;
    • aggiunge al riepilogo il percorso dellarchivio file.
  7. Determina i file effettivamente presenti in out\:
    • se nessuno → warning.
  8. Se upload abilitato e ci sono file in out\:
    • per ogni file costruisce il percorso remoto:

      <RcloneRemoteDest>/<DATASTAMP>/<NOMEARCHIVIO>
      
    • chiama Invoke-RcloneCopyTo per inviarlo;

    • aggiorna il riepilogo con la destinazione.

  9. Copie locali:
    • se KeepLocalArchives=true:
      • Move-OutFiles-ToStores e Empty-OutFolder;
    • se false:
      • Delete-OutFiles e Empty-OutFolder.
  10. Retention:
    • se upload abilitato → Apply-RemoteRetention;
    • sempre → Apply-LocalArchivesRetention + Apply-GenericRetention.
  11. Determina lesito finale:
    • se sono stati registrati warning → ESITO: COMPLETATO CON WARNING;
    • se nessun errore/warning → ESITO: COMPLETATO.
  12. Report mail:
    • se send-mail.ps1 esiste:
      • viene “dot-sourced” ( . .\send-mail.ps1 );
      • viene chiamata la funzione che invia la mail passando:
        • Subject = MailSubjectPref + <testo> (es. include host ed esito);
        • Body = riepilogo + log sintetico.
    • se succede un errore generale:
      • il catch imposta ESITO: FALLITO;
      • logga lerrore;
      • tenta comunque di inviare unemail di fallimento.

8. Invio mail e template send-mail.ps1 + report_template.html

8.1 Parametri e funzioni principali

send-mail.ps1 viene eseguito dal motore di backup con:

  • -Subject → oggetto della mail (prefisso da MailSubjectPref + esito/hostname);
  • -Body → testo con riepilogo + estratto del log.

Funzioni principali:

  • Format-Bytes / Format-Duration
    Utility per formato dimensione e durata in forma leggibile.

  • Get-StatusInfo
    Analizza la stringa Body cercando ESITO: ... e restituisce:

    • stato (OK/WARNING/FAIL) e
    • colore da usare nel template (verde/giallo/rosso).
  • Build-ReportHtml
    Costruisce lHTML finale del report:

    1. Cerca report_template.html in:
      • $script:InstallerConfDir (quando eseguito tramite installer GUI),
      • $InstallerConfDir,
      • bin\conf vicino allo script,
      • C:\polo\scripts\bin\conf.
    2. Se non trova il template:
      • genera una versione HTML di fallback (semplice ma leggibile) e non blocca il job.
    3. Se trova il template:
      • lo legge in UTF-8;
      • sostituisce i placeholder con:
        • stato e colore (XXXSTATUSXXX, XXXBGCOLORXXX, ecc.);
        • host, versione script;
        • data/ora di inizio/fine, durata;
        • dimensioni totali/SQL/FILES;
        • spazio disco totale/usato/libero;
        • destinazione rclone;
        • dettaglio del log formattato con <br> al posto dei newline.
  • Send-ReportMail
    Si occupa di inviare realmente la mail:

    1. Se MailEnabled=false → esce loggando che la mail è disabilitata.
    2. Recupera i parametri Mail* (host, porta, credenziali, mittente, destinatari).
    3. Crea un SmtpClient:
      • abilita SSL/TLS;
      • imposta eventuali credenziali (MailUser / MailPassword);
      • imposta From e To.
    4. Imposta Body HTML (quello generato da Build-ReportHtml) e loggetto.
    5. Invia e logga il risultato.

Alla fine del file:

  • viene chiamato Send-ReportMail -Subject $Subject -Body $Body.

9. Modalità duso consigliata (end-to-end)

9.1 Prima installazione

  1. Apri PowerShell come Administrator.

  2. Lancia linstaller GUI con:

    powershell
    irm "https://gitea.poloinformatico.it/Mattia/Backup-AdHoc/raw/branch/main/install-AdHoc-Backup-GUI.ps1" | iex
    
  3. Nella GUI:

    • verifica la cartella di installazione (es. C:\polo\scripts);
    • lascia gli URL di default, a meno che tu non voglia prendere i file da un tuo branch.
  4. Configura la schedulazione:

    • spunta “Crea attività pianificata”;
    • imposta “Giornaliero” o “Settimanale”;
    • scegli lorario (es. 23:00) e il giorno (se settimanale);
    • eventualmente modifica il nome dellattività.
  5. Compila la sezione backup.conf:

    • imposta BackupRoot (es. C:\Backups_AdHoc);
    • imposta ArchiveSources con le cartelle da salvare;
    • configura SQL (istanza, autenticazione, DB da includere/escludere);
    • imposta RcloneRemoteDest e, se necessario, RcloneBwl/RcloneExtraArgs;
    • configura la parte mail (SMTP, credenziali, mittente/destinatari).
  6. (Opzionale) Spunta “Eseguire il backup subito dopo linstallazione” per fare un test completo.

  7. Premi “Installa”:

    • linstaller scarica gli script;
    • prepara layout e tool;
    • crea la Scheduled Task se richiesto.
  8. Premi “Chiudi”:

    • se avevi spuntato lopzione, parte il backup immediato.

9.2 Verifica dopo il primo run

  • Controlla il log in C:\Backups_AdHoc\logs\.
  • Verifica che:
    • siano presenti archivi in Files\ / Databases\ (se KeepLocalArchives=true);
    • i file siano arrivati sul remoto (rclone);
    • sia arrivata la mail di report allindirizzo/i impostati in MailTo.

9.3 Esecuzione manuale (senza GUI)

Una volta installato, puoi sempre testare o lanciare il backup manualmente.

Da PowerShell:

cd C:\polo\scripts
.\AdHoc-Backup.ps1 -Config "C:\polo\scripts\bin\conf\backup.conf"

Oppure in modalità silenziosa:

cd C:\polo\scripts
.\AdHoc-Backup.ps1 -Config "C:\polo\scripts\bin\conf\backup.conf" -Quiet

10. Troubleshooting rapido

  • Errore: “File di configurazione non trovato. Ho creato un template…”

    • Lo script non trova backup.conf → ne crea uno base.
    • Compila il template generato e riesegui il backup.
  • Errore SQL: sqlcmd.exe non trovato

    • Installa i client tools di SQL Server oppure aggiungi sqlcmd.exe al PATH di sistema.
    • Verifica i permessi di scrittura su _sql_stage\ (account del servizio SQL).
  • Errore rclone: rclone.conf assente

    • Lo script apre una PowerShell con rclone config.
    • Configura almeno un remote con il nome usato in RcloneRemoteDest.
    • Riesegui il backup dopo aver completato la configurazione.
  • Mail non arrivano

    • Verifica MailEnabled=true in backup.conf.
    • Controlla MailSmtpHost / MailSmtpPort / MailUseAuth / MailUser / MailPassword.
    • Verifica che MailFrom e MailTo siano corretti.
    • Usa il pulsante “Test mail” della GUI per fare prove rapide.
  • Spazio disco che si riempie troppo

    • Controlla:
      • LocalRetentionDaysFiles
      • LocalRetentionDaysDb
      • RetentionDays (per log e _sql_stage)
    • Riduci i valori se vuoi conservare meno storico, oppure aumenta lo spazio a disposizione.
  • Backup troppo lenti o banda saturata

    • Aumenta o diminuisci SevenZipCompressionLevel a seconda delle esigenze.

    • Usa RcloneBwl per limitare la banda, es.:

      RcloneBwl=10M
      
    • Valuta di schedulare il backup in orari notturni tramite la GUI.