38 lines
1.2 KiB
PowerShell
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
|