You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell按设施保留最近3份SQL备份并自动清理?

修正后的PowerShell脚本(按设施分组保留最近3份备份)

针对你的需求,需要按设施标识对备份文件分组后再保留每组的最近3份,以下是修正后的脚本:

$RCDestination = "\\computername\folder"
# 匹配符合命名规则的SQL备份文件
$filePattern = "Backup_DB_Facility_*.bak"

# 1. 获取目标文件夹中符合规则的所有备份文件
# 2. 按设施名称拆分分组(从文件名提取第4个下划线分隔的字段)
# 3. 每组内按文件名排序,保留最后3份,删除其余文件
Get-ChildItem -Path $RCDestination -Filter $filePattern -File | 
    Group-Object -Property { $_.Name.Split('_')[3] } | 
    ForEach-Object {
        # 若当前设施的备份文件≤3份,不执行删除;否则删除超出的旧文件
        if ($_.Group.Count -gt 3) {
            $_.Group | Sort-Object -Property Name | Select-Object -Skip ($_.Group.Count - 3) | Remove-Item -Force
        }
    }

关键修改说明

  1. 精准过滤文件:用-Filter $filePattern直接筛选目标备份文件,-File参数自动排除文件夹,替代原脚本中低效的where判断。
  2. 按设施分组:通过Group-Object和文件名拆分$_.Name.Split('_')[3],将同一设施的备份文件归为一组(比如所有AAAA的文件会被分到同一组)。
  3. 分组内保留最近3份:每组文件按文件名排序(文件名中的日期段保证字典序与时间顺序一致),仅删除超出3份的旧文件;若某设施备份不足3份,自动全部保留。

原脚本问题分析

  • 未按设施分组:原脚本将所有文件全局排序后跳过3个,导致仅保留排序最靠后的3个文件(均为同一设施),其他设施的备份被全部删除。
  • 无效过滤条件:($FileName -like "$FileName")是恒成立的无效判断,无法筛选目标文件。

Task Scheduler 配置建议

将脚本保存为RollingBackupCleanup.ps1,在任务计划程序中创建任务:

  • 触发器:设置为每日触发(根据你的滚动保留3天需求,可调整为每日凌晨执行)
  • 操作:选择「启动程序」,程序/脚本填powershell.exe,添加参数:
    -ExecutionPolicy Bypass -File "C:\Scripts\RollingBackupCleanup.ps1"
    
    (-ExecutionPolicy Bypass用于绕过PowerShell的脚本执行限制,确保脚本能正常运行)

内容的提问来源于stack exchange,提问作者keio9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:35:20