Files
Keyvi_MS-SQL_Backup/Backup_DB_Keyvi.ps1
T
2026-07-29 21:09:29 +02:00

38 lines
1.2 KiB
PowerShell

$Server = ".\KEYVI"
$Database = "DB_Keyvi"
$BackupRoot = "D:\SQLBackup\DB_Keyvi"
$RetentionDays = 365
$now = Get-Date
$year = $now.ToString("yyyy")
$month = $now.ToString("MM")
# Zielordner: D:\SQLBackup\DB_Keyvi\YYYY\MM\
$BackupDir = Join-Path (Join-Path $BackupRoot $year) $month
New-Item -ItemType Directory -Path $BackupDir -Force | Out-Null
# Dateiname: DB_Keyvi_yyyyMMdd_HHmmss.bak
$timestamp = $now.ToString("yyyyMMdd_HHmmss")
$BackupFile = Join-Path $BackupDir ("{0}_{1}.bak" -f $Database, $timestamp)
# Backup
$sql = "BACKUP DATABASE [$Database] TO DISK = N'$BackupFile' WITH CHECKSUM, STATS = 10;"
sqlcmd -S $Server -E -C -Q $sql
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
# Alte Backups löschen
$cutoff = (Get-Date).AddDays(-$RetentionDays)
Get-ChildItem -Path $BackupRoot -Recurse -File -Filter "*.bak" |
Where-Object { $_.LastWriteTime -lt $cutoff } |
Remove-Item -Force
# Leere Ordner löschen (von unten nach oben)
Get-ChildItem -Path $BackupRoot -Recurse -Directory |
Sort-Object FullName -Descending |
ForEach-Object {
if (-not (Get-ChildItem -Path $_.FullName -Force | Select-Object -First 1)) {
Remove-Item -Path $_.FullName -Force
}
}
exit 0