在 Windows 上通过系统自带的 任务计划程序 来完成定时执行 PowerShell 脚本。
第一步:准备工作
在创建定时任务之前,请务必完成以下准备:
- 编写Powershell脚本Clean-Old-Folders.ps1,删除更新日期在60天以上的文件夹
# ===================================================================
# 脚本功能:删除指定目录中超过特定天数的【文件夹】及其所有内容
# ===================================================================
# --- 配置区域 ---
# 设置要清理的目标目录
$targetPath = "C:\backupMySQL"
# 设置保留天数(超过此天数的文件夹将被删除)
$daysToKeep = 60
# --- 配置结束 ---
# 检查目标目录是否存在
if (-not (Test-Path -Path $targetPath)) {
Write-Host "错误:目标目录 '$targetPath' 不存在!" -ForegroundColor Red
Read-Host "按任意键退出"
exit
}
# 计算截止日期
$cutoffDate = (Get-Date).AddDays(-$daysToKeep)
Write-Host "目标目录: $targetPath"
Write-Host "将删除所有最后修改时间早于 $cutoffDate 的【文件夹】..." -ForegroundColor Yellow
# --- 第一步:预览将要删除的文件夹 (安全模式) ---
# 使用 -WhatIf 参数,它只会显示将要执行的操作,但不会真的删除。
# 这是强烈推荐的安全检查步骤!
Write-Host "`n--- 预览模式 (以下为将要删除的文件夹,并未实际删除) ---" -ForegroundColor Green
Get-ChildItem -Path $targetPath -Recurse -Force |
# 关键筛选条件:只选择是文件夹 (.PSIsContainer) 且修改时间早于截止日期的项目
Where-Object { $_.PSIsContainer -and $_.LastWriteTime -lt $cutoffDate } |
Remove-Item -Recurse -Force -WhatIf -Verbose
# --- 第二步:确认后执行实际删除 ---
# 当你确认预览列表无误后,取消下面几行代码的注释 (#) 来执行真正的删除操作。
# 警告:此操作不可逆!
#
# Write-Host "`n--- 正在执行删除操作... ---" -ForegroundColor Red
# Get-ChildItem -Path $targetPath -Recurse -Force |
# Where-Object { $_.PSIsContainer -and $_.LastWriteTime -lt $cutoffDate } |
# Remove-Item -Recurse -Force -Verbose
# Write-Host "`n清理完成!" -ForegroundColor Green
2. 确定脚本的最终位置
将创建的 Clean-Old-Folders.ps1 文件移动到一个固定、不会被轻易移动或删除的目录。例如:C:\Scripts\Clean-Old-Folders.ps1。不要把它放在桌面或临时文件夹里。
3.确保脚本可以独立运行
- 手动执行一次:右键点击 Clean-Old-Folders.ps1 -> “使用 PowerShell 运行”,确保脚本本身没有语法错误,并且逻辑正确(已经完成了预览和正式删除的测试)。
- 解决执行策略问题:如果脚本无法运行,可能是因为 PowerShell 的执行策略限制。你可以在 PowerShell 窗口中运行 Set-ExecutionPolicy RemoteSigned 并选择 Y 来允许本地脚本运行。
第二步:创建基本定时任务
使用“创建基本任务”向导,按照顺序操作。
- 打开任务计划程序
- 按下 Win + R 键,打开“运行”对话框。
- 输入 taskschd.msc 然后按回车。
- 创建基本任务
- 在右侧的“操作”面板中,点击 “创建基本任务…”。
- 填写名称和描述
- 名称: 给任务起一个有意义的名字,例如 MySQL备份清理任务。
- 描述 (可选): 可以写得更详细一些,例如 删除C:\backupMySQL目录下超过60天的文件夹。
- 点击 “下一步”。
- 设置触发器(何时执行)
- 选择你希望任务执行的频率。对于清理任务,“每天” 是最常见的选择。
- 点击 “下一步”。
- 设置具体的执行时间。例如,选择一个服务器负载较低的时间,比如凌晨 0:05:00。
- 点击 “下一步”。
- 设置操作(执行什么)
- 选择 “启动程序”。
- 点击 “下一步”。
- 这是最关键的一步,请仔细填写:
- 程序/脚本: 这里填的不是你的 .ps1 文件!而是 PowerShell 的可执行文件。直接输入
powershell.exe。 - 添加参数(可选): 这里是告诉 powershell.exe 要做什么的地方。输入以下内容(请根据你的实际路径修改):
-NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\Scripts\Clean-Old-Folders.ps1"-NonInteractive: 非交互模式,防止脚本在需要用户输入时卡住。
-WindowStyle Hidden: 隐藏执行时的 PowerShell 窗口,让任务在后台静默运行。
-ExecutionPolicy Bypass: 非常重要!这个参数会为本次执行临时绕过系统的执行策略限制,确保你的脚本能运行,且不会改变系统全局设置。
-File "..."`: 指定要执行的脚本文件的完整绝对路径。路径最好用双引号括起来,以防有空格。 - 起始于(可选): 可以留空,或者填写脚本所在的目录,例如 `C:\Scripts`。这有助于脚本正确解析相对路径。
- 程序/脚本: 这里填的不是你的 .ps1 文件!而是 PowerShell 的可执行文件。直接输入
- 完成创建
- 检查一下摘要信息,确认无误后,点击 “完成”。
第三步:高级设置与最佳实践
基本任务创建完成后,我们还需要做一些高级设置,让任务更健壮。
- 找到并编辑任务
- 在任务计划程序库的中间列表中,找到你刚刚创建的任务(例如 MySQL备份清理任务)。
- 右键点击它,选择 “属性”。
- 常规选项卡
- 安全选项: 这是最重要的设置。
- 选择 “不管用户是否登录都要运行”。这能确保即使服务器重启后没有人登录,任务也能执行。
- 勾选 “使用最高权限运行”。因为你的脚本要删除
C:\backupMySQL下的文件,可能需要管理员权限。 - 点击 “更改用户或组…”,输入 SYSTEM 或 Administrators 并检查名称,使用系统账户或管理员账户运行更稳定。SYSTEM 是最推荐的,因为它拥有最高权限且不需要密码。
- 安全选项: 这是最重要的设置。
- 设置选项卡
- 勾选 “如果任务失败,按以下频率重新启动”,并设置为每隔 1 分钟,尝试次数 3 次。这可以应对一些临时性的网络或系统问题。
- 勾选 “如果任务运行时间超过以下时间,停止任务”,可以设置为 1 小时,防止任务因意外原因卡死。
- “如果任务计划程序已在运行此任务,以下规则使用” 中选项改为 “请勿启动新实例”,防止任务重叠执行。
- 保存设置
- 点击 “确定”。如果更改了用户,系统可能会要求你输入账户密码。
第四步:测试与验证
- 手动运行测试
- 在任务列表中右键点击任务,选择 “运行”。
- 等待几秒钟。由于设置了 -WindowStyle Hidden,不会看到任何窗口。
- 去检查 C:\backupMySQL 目录,看看符合条件的文件夹是否被删除了。
- 检查历史记录
- 如果任务没有按预期工作,右键点击任务 -> “属性” -> 切换到 “历史记录” 选项卡。
- 这里会记录任务的每一次运行状态(成功、失败)和详细的事件信息。如果失败了,这里会提供错误代码和原因,是排错的关键。