param( [string]$BackupFolder = "C:\YEDEK\Sql_bak_files", [string]$SQLInstance = "localhost" ) Write-Host "=== SQL AUTO RESTORE SCRIPT ===" -ForegroundColor Cyan # .bak dosyalarını al $bakFiles = Get-ChildItem -Path $BackupFolder -Filter *.bak foreach ($bak in $bakFiles) { Write-Host "`nProcessing file: $($bak.Name)" -ForegroundColor Yellow # --- ORJINAL DATABASE ADINI ÇIKAR --- $fileBase = [System.IO.Path]::GetFileNameWithoutExtension($bak) $parts = $fileBase.Split("_") if ($parts.Count -gt 1) { $DBName = ($parts[0..($parts.Count - 2)] -join "_") } else { $DBName = $fileBase } Write-Host "Detected DB Name: $DBName" -ForegroundColor Green # --- DATABASE VAR MI KONTROL ET --- $dbExists = Invoke-Sqlcmd -ServerInstance $SQLInstance ` -Query "SELECT COUNT(*) AS C FROM sys.databases WHERE name = '$DBName'" | Select-Object -ExpandProperty C if ($dbExists -eq 1) { $response = Read-Host "Database '$DBName' mevcut. DROP edilsin mi? (E/H)" if ($response -eq "E") { Write-Host "Dropping $DBName..." -ForegroundColor Red Invoke-Sqlcmd -ServerInstance $SQLInstance ` -Query "ALTER DATABASE [$DBName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [$DBName];" } else { Write-Host "DROP atlandı." -ForegroundColor DarkGray } } else { Write-Host "Database mevcut değil, DROP sorulmadı." -ForegroundColor DarkGray } # --- RESTORE FILELISTONLY --- $fileList = Invoke-Sqlcmd -ServerInstance $SQLInstance ` -Query "RESTORE FILELISTONLY FROM DISK = '$($bak.FullName)'" $logicalData = ($fileList | Where-Object { $_.Type -eq "D" }).LogicalName $logicalLog = ($fileList | Where-Object { $_.Type -eq "L" }).LogicalName # --- KLASÖR OLUŞTUR --- $targetFolder = "C:\Mikro\v17xx\$DBName" if (!(Test-Path $targetFolder)) { New-Item -ItemType Directory -Path $targetFolder | Out-Null } $newMdf = "$targetFolder\$DBName._MS" $newLdf = "$targetFolder\${DBName}_log.ldf" Write-Host "Restoring to:" $targetFolder -ForegroundColor Cyan # --- RESTORE COMMAND --- $restoreQuery = @" RESTORE DATABASE [$DBName] FROM DISK = '$($bak.FullName)' WITH MOVE '$logicalData' TO '$newMdf', MOVE '$logicalLog' TO '$newLdf', REPLACE, RECOVERY; "@ try { Invoke-Sqlcmd -ServerInstance $SQLInstance -Query $restoreQuery Write-Host "SUCCESS: $DBName restored." -ForegroundColor Green } catch { Write-Host "ERROR restoring $DBName" -ForegroundColor Red Write-Host $_ } } Write-Host "`nCompleted."