Update install-AdHoc-Backup.ps1
This commit is contained in:
parent
6ac4c16c37
commit
37baf0381f
@ -6,19 +6,20 @@
|
|||||||
# ==========================
|
# ==========================
|
||||||
# CONFIGURAZIONE INIZIALE
|
# CONFIGURAZIONE INIZIALE
|
||||||
# ==========================
|
# ==========================
|
||||||
# Cartella dove installeremo script e config
|
|
||||||
$InstallRoot = "C:\polo\script"
|
$InstallRoot = "C:\polo\script"
|
||||||
# Nome dello script di backup vero e proprio
|
|
||||||
$BackupScriptName = "AdHoc-Backup.ps1"
|
$BackupScriptName = "AdHoc-Backup.ps1"
|
||||||
# Nome del file di configurazione
|
|
||||||
$ConfigFileName = "backup.conf"
|
$ConfigFileName = "backup.conf"
|
||||||
|
|
||||||
# Qui mettiamo direttamente i tuoi link
|
# link dal tuo Gitea
|
||||||
$DownloadMap = @{
|
$DownloadMap = @{
|
||||||
"AdHoc-Backup.ps1" = "https://gitea.poloinformatico.it/Mattia/Backup-AdHoc/raw/branch/main/AdHoc-Backup.ps1"
|
"AdHoc-Backup.ps1" = "https://gitea.poloinformatico.it/Mattia/Backup-AdHoc/raw/branch/main/AdHoc-Backup.ps1"
|
||||||
"backup.conf" = "https://gitea.poloinformatico.it/Mattia/Backup-AdHoc/raw/branch/main/backup.conf"
|
"backup.conf" = "https://gitea.poloinformatico.it/Mattia/Backup-AdHoc/raw/branch/main/backup.conf"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# URL degli strumenti come nello script di backup
|
||||||
|
$SevenZipPortableUrl = 'https://www.7-zip.org/a/7zr.exe'
|
||||||
|
$RcloneZipUrl = 'https://downloads.rclone.org/rclone-current-windows-amd64.zip'
|
||||||
|
|
||||||
# ==========================
|
# ==========================
|
||||||
# FUNZIONI DI SUPPORTO
|
# FUNZIONI DI SUPPORTO
|
||||||
# ==========================
|
# ==========================
|
||||||
@ -108,9 +109,6 @@ function Ensure-DefaultConfig {
|
|||||||
Write-Host "File di configurazione non trovato, ne creo uno di base..." -ForegroundColor Yellow
|
Write-Host "File di configurazione non trovato, ne creo uno di base..." -ForegroundColor Yellow
|
||||||
|
|
||||||
@"
|
@"
|
||||||
# backup.conf generato automaticamente
|
|
||||||
# Modificalo con l'opzione 3 del menù.
|
|
||||||
|
|
||||||
BackupRoot=C:\Backups_AdHoc
|
BackupRoot=C:\Backups_AdHoc
|
||||||
LocalRetentionDaysFiles=2
|
LocalRetentionDaysFiles=2
|
||||||
LocalRetentionDaysDb=2
|
LocalRetentionDaysDb=2
|
||||||
@ -149,34 +147,93 @@ MailSubjectPref=[BACKUP ADHOC]
|
|||||||
"@ | Set-Content -Path $ConfigPath -Encoding UTF8
|
"@ | Set-Content -Path $ConfigPath -Encoding UTF8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Get-BackupRootFromConfig {
|
||||||
|
param([string]$ConfigPath)
|
||||||
|
$br = Get-ConfigValue -Path $ConfigPath -Key "BackupRoot"
|
||||||
|
if ([string]::IsNullOrWhiteSpace($br)) {
|
||||||
|
$br = "C:\Backups_AdHoc"
|
||||||
|
}
|
||||||
|
return $br
|
||||||
|
}
|
||||||
|
|
||||||
# ==========================
|
# ==========================
|
||||||
# FUNZIONE 1: INSTALLA
|
# INSTALL 7ZIP / RCLONE STILE AdHoc-Backup.ps1
|
||||||
# ==========================
|
# ==========================
|
||||||
function Install-AdHocBackup {
|
function Install-7Zip-LikeBackup {
|
||||||
Write-Host "== INSTALLAZIONE SCRIPT BACKUP ==" -ForegroundColor Cyan
|
param(
|
||||||
Ensure-Folder -Path $InstallRoot
|
[string]$BackupRoot
|
||||||
|
)
|
||||||
|
$binDir = Join-Path $BackupRoot "Bin"
|
||||||
|
$bin7zDir = Join-Path $binDir "7zip"
|
||||||
|
Ensure-Folder $binDir
|
||||||
|
Ensure-Folder $bin7zDir
|
||||||
|
|
||||||
foreach ($entry in $DownloadMap.GetEnumerator()) {
|
$sevenZipExe = Join-Path $bin7zDir "7z.exe"
|
||||||
$fileName = $entry.Key
|
$sevenZip7zr = Join-Path $bin7zDir "7zr.exe"
|
||||||
$url = $entry.Value
|
|
||||||
$dest = Join-Path $InstallRoot $fileName
|
if (Test-Path $sevenZipExe -or Test-Path $sevenZip7zr) {
|
||||||
Download-File -Url $url -Destination $dest
|
Write-Host "7-Zip già presente in $bin7zDir" -ForegroundColor Green
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
$configPath = Join-Path $InstallRoot $ConfigFileName
|
$dest = $sevenZip7zr
|
||||||
Ensure-DefaultConfig -ConfigPath $configPath
|
Write-Host "Scarico 7zip portable..." -ForegroundColor Cyan
|
||||||
|
Download-File -Url $SevenZipPortableUrl -Destination $dest
|
||||||
|
if (Test-Path $dest) {
|
||||||
|
Write-Host "7zip installato in $bin7zDir" -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Warning "7zip non scaricato."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Chiede subito se vuole pianificare
|
function Install-Rclone-LikeBackup {
|
||||||
if (Read-YesNo "Vuoi creare una pianificazione (operazione consigliata)?" $true) {
|
param(
|
||||||
Show-ScheduleMenu
|
[string]$BackupRoot
|
||||||
|
)
|
||||||
|
$binDir = Join-Path $BackupRoot "Bin"
|
||||||
|
$rcloneDir = Join-Path $binDir "RClone"
|
||||||
|
$rcloneExe = Join-Path $rcloneDir "rclone.exe"
|
||||||
|
$rcloneZip = Join-Path $rcloneDir "rclone-current-windows-amd64.zip"
|
||||||
|
$rcloneConf = Join-Path $rcloneDir "rclone.conf"
|
||||||
|
|
||||||
|
Ensure-Folder $binDir
|
||||||
|
Ensure-Folder $rcloneDir
|
||||||
|
|
||||||
|
if (-not (Test-Path $rcloneExe)) {
|
||||||
|
Write-Host "Scarico rclone..." -ForegroundColor Cyan
|
||||||
|
Download-File -Url $RcloneZipUrl -Destination $rcloneZip
|
||||||
|
|
||||||
|
try { Add-Type -AssemblyName System.IO.Compression.FileSystem | Out-Null } catch {}
|
||||||
|
[System.IO.Compression.ZipFile]::ExtractToDirectory($rcloneZip, $rcloneDir)
|
||||||
|
|
||||||
|
# dentro lo zip c'è una sottocartella, lo cerchiamo
|
||||||
|
$found = Get-ChildItem -LiteralPath $rcloneDir -Recurse -Filter 'rclone.exe' | Select-Object -First 1
|
||||||
|
if ($found) {
|
||||||
|
Copy-Item -LiteralPath $found.FullName -Destination $rcloneExe -Force
|
||||||
|
# pulisco le sottocartelle estratte
|
||||||
|
Get-ChildItem -LiteralPath $rcloneDir -Directory | ForEach-Object { Remove-Item $_.FullName -Recurse -Force }
|
||||||
|
} else {
|
||||||
|
Write-Warning "rclone.exe non trovato nello zip."
|
||||||
|
}
|
||||||
|
|
||||||
|
# rimuovo lo zip come richiesto
|
||||||
|
if (Test-Path $rcloneZip) {
|
||||||
|
Remove-Item $rcloneZip -Force
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "rclone installato in $rcloneDir" -ForegroundColor Green
|
||||||
|
} else {
|
||||||
|
Write-Host "rclone già presente in $rcloneDir" -ForegroundColor Green
|
||||||
}
|
}
|
||||||
|
|
||||||
# Chiede subito se vuole modificare configurazione
|
# lancio configurazione come nello script originale
|
||||||
if (Read-YesNo "Vuoi modificare adesso la configurazione del file backup.conf?" $false) {
|
if (-not (Test-Path $rcloneConf)) {
|
||||||
Edit-BackupConfig -ConfigPath $configPath
|
Write-Host "Apro la configurazione di rclone in una nuova finestra..." -ForegroundColor Yellow
|
||||||
|
$cmd = " & `"$rcloneExe`" --config `"$rcloneConf`" config "
|
||||||
|
Start-Process -FilePath "powershell.exe" -ArgumentList "-NoExit","-Command",$cmd -WindowStyle Normal | Out-Null
|
||||||
|
} else {
|
||||||
|
Write-Host "rclone.conf già presente: $rcloneConf" -ForegroundColor Green
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Installazione completata." -ForegroundColor Green
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# ==========================
|
# ==========================
|
||||||
@ -257,7 +314,7 @@ function Edit-BackupConfig {
|
|||||||
"KeepLocalArchives" = "true = tiene una copia locale dopo l'upload."
|
"KeepLocalArchives" = "true = tiene una copia locale dopo l'upload."
|
||||||
"EnableFileBackup" = "true = esegue il backup delle cartelle in ArchiveSources."
|
"EnableFileBackup" = "true = esegue il backup delle cartelle in ArchiveSources."
|
||||||
"EnableRcloneUpload" = "true = dopo il backup carica su cloud tramite rclone."
|
"EnableRcloneUpload" = "true = dopo il backup carica su cloud tramite rclone."
|
||||||
"ArchiveSources" = "Elenco cartelle/sorgenti da salvare, separate da | (pipe)."
|
"ArchiveSources" = "Elenco cartelle/sorgenti da salvare, separate da |."
|
||||||
"EnableSqlBackup" = "true = fa anche i backup dei database SQL Server."
|
"EnableSqlBackup" = "true = fa anche i backup dei database SQL Server."
|
||||||
"SqlInstance" = "Nome/istanza SQL Server (es. localhost\SQLEXPRESS)."
|
"SqlInstance" = "Nome/istanza SQL Server (es. localhost\SQLEXPRESS)."
|
||||||
"SqlUseWindowsAuth" = "true = usa utente Windows; false = usa SqlUser/SqlPassword."
|
"SqlUseWindowsAuth" = "true = usa utente Windows; false = usa SqlUser/SqlPassword."
|
||||||
@ -302,6 +359,57 @@ function Edit-BackupConfig {
|
|||||||
Write-Host "Configurazione aggiornata in $ConfigPath" -ForegroundColor Green
|
Write-Host "Configurazione aggiornata in $ConfigPath" -ForegroundColor Green
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ==========================
|
||||||
|
# FUNZIONE 4: ESEGUI PRIMO BACKUP
|
||||||
|
# ==========================
|
||||||
|
function Run-FirstBackup {
|
||||||
|
$backupScriptPath = Join-Path $InstallRoot $BackupScriptName
|
||||||
|
if (-not (Test-Path $backupScriptPath)) {
|
||||||
|
Write-Warning "Lo script $backupScriptPath non esiste. Esegui prima l'installazione (1)."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Write-Host "Eseguo il primo backup..." -ForegroundColor Cyan
|
||||||
|
# lo eseguiamo nello stesso PowerShell così l’utente vede l’output
|
||||||
|
& powershell.exe -NoProfile -ExecutionPolicy Bypass -File $backupScriptPath
|
||||||
|
}
|
||||||
|
|
||||||
|
# ==========================
|
||||||
|
# FUNZIONE 1: INSTALLA
|
||||||
|
# ==========================
|
||||||
|
function Install-AdHocBackup {
|
||||||
|
Write-Host "== INSTALLAZIONE SCRIPT BACKUP ==" -ForegroundColor Cyan
|
||||||
|
Ensure-Folder -Path $InstallRoot
|
||||||
|
|
||||||
|
foreach ($entry in $DownloadMap.GetEnumerator()) {
|
||||||
|
$fileName = $entry.Key
|
||||||
|
$url = $entry.Value
|
||||||
|
$dest = Join-Path $InstallRoot $fileName
|
||||||
|
Download-File -Url $url -Destination $dest
|
||||||
|
}
|
||||||
|
|
||||||
|
$configPath = Join-Path $InstallRoot $ConfigFileName
|
||||||
|
Ensure-DefaultConfig -ConfigPath $configPath
|
||||||
|
|
||||||
|
# ora che abbiamo il config, vediamo il BackupRoot per installare 7zip/rclone negli stessi percorsi
|
||||||
|
$backupRoot = Get-BackupRootFromConfig -ConfigPath $configPath
|
||||||
|
Ensure-Folder $backupRoot
|
||||||
|
|
||||||
|
Install-7Zip-LikeBackup -BackupRoot $backupRoot
|
||||||
|
Install-Rclone-LikeBackup -BackupRoot $backupRoot
|
||||||
|
|
||||||
|
# Chiede subito se vuole pianificare
|
||||||
|
if (Read-YesNo "Vuoi creare una pianificazione (operazione consigliata)?" $true) {
|
||||||
|
Show-ScheduleMenu
|
||||||
|
}
|
||||||
|
|
||||||
|
# Chiede subito se vuole modificare configurazione
|
||||||
|
if (Read-YesNo "Vuoi modificare adesso la configurazione del file backup.conf?" $false) {
|
||||||
|
Edit-BackupConfig -ConfigPath $configPath
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Installazione completata." -ForegroundColor Green
|
||||||
|
}
|
||||||
|
|
||||||
# ==========================
|
# ==========================
|
||||||
# MENÙ PRINCIPALE
|
# MENÙ PRINCIPALE
|
||||||
# ==========================
|
# ==========================
|
||||||
@ -310,10 +418,11 @@ do {
|
|||||||
Write-Host "==============================" -ForegroundColor DarkCyan
|
Write-Host "==============================" -ForegroundColor DarkCyan
|
||||||
Write-Host " INSTALL ADHOC BACKUP - MENU"
|
Write-Host " INSTALL ADHOC BACKUP - MENU"
|
||||||
Write-Host "==============================" -ForegroundColor DarkCyan
|
Write-Host "==============================" -ForegroundColor DarkCyan
|
||||||
Write-Host "1) Installa / aggiorna script (scarica da gitea)"
|
Write-Host "1) Installa / aggiorna script (scarica da gitea, installa 7zip e rclone)"
|
||||||
Write-Host "2) Crea pianificazione (giornaliera/settimanale, con orario)"
|
Write-Host "2) Crea pianificazione (giornaliera/settimanale, con orario)"
|
||||||
Write-Host "3) Modifica configurazione backup.conf (guidata)"
|
Write-Host "3) Modifica configurazione backup.conf (guidata)"
|
||||||
Write-Host "0) Esci"
|
Write-Host "4) Esegui il primo backup"
|
||||||
|
Write-Host "0) Chiudi la finestra"
|
||||||
$sel = Read-Host "Seleziona"
|
$sel = Read-Host "Seleziona"
|
||||||
|
|
||||||
$configPath = Join-Path $InstallRoot $ConfigFileName
|
$configPath = Join-Path $InstallRoot $ConfigFileName
|
||||||
@ -322,10 +431,9 @@ do {
|
|||||||
"1" { Install-AdHocBackup }
|
"1" { Install-AdHocBackup }
|
||||||
"2" { Show-ScheduleMenu }
|
"2" { Show-ScheduleMenu }
|
||||||
"3" { Edit-BackupConfig -ConfigPath $configPath }
|
"3" { Edit-BackupConfig -ConfigPath $configPath }
|
||||||
"0" { break }
|
"4" { Run-FirstBackup }
|
||||||
|
"0" { Stop-Process -Id $PID }
|
||||||
default { Write-Host "Scelta non valida." -ForegroundColor Red }
|
default { Write-Host "Scelta non valida." -ForegroundColor Red }
|
||||||
}
|
}
|
||||||
|
|
||||||
} while ($true)
|
} while ($true)
|
||||||
|
|
||||||
Write-Host "Uscita dallo script." -ForegroundColor Cyan
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user