如何用PowerShell遍历数据库数组获取最新BAK文件并执行恢复?
SQL Server指定数据库最新备份自动还原脚本
基础参数定义
先设置备份文件存储路径和需要处理的数据库列表:
# 备份文件所在文件夹路径 $backupPath = "D:\SQLBackups" # 需要还原的数据库名称数组 $databases = @("Orders", "Items", "Customers")
遍历处理每个数据库
用ForEach循环逐个处理目标数据库,完成通配符生成、最新备份筛选和还原命令执行:
foreach ($dbName in $databases) { # 生成匹配规则:自动拼接出*Orders*.bak这类通配符 $wildcard = "*$dbName*.bak" # 获取符合规则的最新备份文件(按修改时间倒序,取第一个) $latestBak = Get-ChildItem -Path $backupPath -Filter $wildcard | Sort-Object LastWriteTime -Descending | Select-Object -First 1 if ($latestBak) { Write-Host "找到 $dbName 的最新备份:$($latestBak.FullName)" # 构建并执行还原命令,按需调整参数 Restore-SqlDatabase -ServerInstance "YourSQLInstanceName" ` -Database $dbName ` -BackupFile $latestBak.FullName ` -ReplaceDatabase # 覆盖现有数据库,不需要可删除此行 } else { Write-Warning "未找到 $dbName 对应的备份文件,请检查路径或命名规则" } }
关键细节说明
- 通配符生成:直接用
*$dbName*.bak即可,PowerShell会自动替换变量为数据库名,生成符合需求的匹配字符串,无需额外拼接操作。 - 最新文件筛选:通过
Sort-Object LastWriteTime -Descending按文件修改时间倒序排列,再用Select-Object -First 1精准获取最新备份。 - 还原参数调整:
-ServerInstance替换为你的SQL实例名称;-ReplaceDatabase用于覆盖已存在的同名称数据库,根据实际场景决定是否保留。
内容的提问来源于stack exchange,提问作者FMFF
相关产品推荐
相关产品推荐

