约 2344 字

约 12 分钟

#计划任务

计划任务用于在指定时间或周期自动运行脚本,不依赖当前打开的终端会话。PowerShell 在 Windows 上通过 ScheduledTasks 模块管理任务,在 Linux 和 macOS 上则需要使用系统自带的调度工具。

#Windows:ScheduledTasks 模块

Windows 上的任务通常由三部分组成:

  • 操作(Action):要运行的程序及参数,由 New-ScheduledTaskAction 创建。
  • 触发器(Trigger):运行时机,由 New-ScheduledTaskTrigger 创建。
  • 注册(Register):把操作和触发器组合成任务,由 Register-ScheduledTask 完成。
> $action = New-ScheduledTaskAction -Execute "$PSHOME\pwsh.exe" `
    -Argument '-NoProfile -File C:\scripts\backup.ps1'

> $trigger = New-ScheduledTaskTrigger -Daily -At '03:00'

> Register-ScheduledTask -TaskName 'DailyBackup' `
    -Action $action -Trigger $trigger -Description '每天凌晨备份'

只运行一次:

> $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(5)
> Register-ScheduledTask -TaskName 'RunOnce' -Action $action -Trigger $trigger

常用的管理命令:

> Get-ScheduledTask -TaskName 'DailyBackup'
> Start-ScheduledTask -TaskName 'DailyBackup'
> Unregister-ScheduledTask -TaskName 'DailyBackup'
  • Get-ScheduledTask 查看任务及其状态。
  • Start-ScheduledTask 立即手动运行一次。
  • Unregister-ScheduledTask 删除任务,加 -Confirm:$false 可跳过确认。
  • 创建以 SYSTEM 身份或需要最高权限运行的任务通常需要管理员权限。

#Linux 与 macOS:系统调度工具

非 Windows 平台没有 ScheduledTasks 模块,需要使用各自系统的机制:

平台工具用途
Linuxcron按分钟级周期运行命令
Linuxsystemd timer与 systemd 集成,支持更精细的触发条件
macOSlaunchd系统原生的定时与守护进程管理

使用 cron 运行 PowerShell 脚本:

$ crontab -e

在编辑器中加入一行,表示每天 3 点执行:

0 3 * * * /usr/bin/pwsh -NoProfile -File /home/user/scripts/backup.ps1

使用 systemd timer 时,需要分别创建 .service 与 .timer 单元,然后启用定时器:

$ systemctl --user enable --now backup.timer
$ systemctl --user list-timers

macOS 的 launchd 通过 .plist 文件定义任务,将其放入 ~/Library/LaunchAgents/ 后使用 launchctl 加载。

#注意事项

计划任务运行时通常没有交互式终端,应避免依赖用户输入或图形界面。脚本中使用绝对路径,并确认运行账户对脚本、输入文件和日志目录具有相应权限。任务的环境变量和工作目录也可能与手动运行时不同,建议在脚本中显式设置。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2