windows 定时任务
windowscmd

windows 定时任务

使用无限循环 windows 如何将一个 powershell 脚本作为守护进程,常驻后台运行,这个脚本会每隔 5 分钟定时执行一个函数 要将一个 PowerShell 脚本作为守护进程,在后台持...

更新于 2023-12-07
1893

使用无限循环

windows 如何将一个 powershell 脚本作为守护进程,常驻后台运行,这个脚本会每隔 5 分钟定时执行一个函数

要将一个 PowerShell 脚本作为守护进程,在后台持续运行并定时执行一个函数,可以使用以下步骤:

  1. 在脚本文件中编写你的函数和逻辑代码。确保你的函数可以独立执行,并且不会阻塞脚本的运行。
  2. 在脚本文件的末尾,使用以下代码创建一个无限循环,以便脚本可以持续运行:
powershell
while ($true) {
# 在这里调用你的函数或执行其他逻辑
Your-FunctionName
# 等待 5 分钟
Start-Sleep -Seconds 300
}
  1. 使用以下命令启动脚本作为守护进程:此命令将以隐藏窗口的方式运行脚本,使其在后台运行。
powershell
powershell -WindowStyle Hidden -File C:\Path\To\MyScript.ps1

使用计划任务

还有哪些调度机制,例如 linux 中的 cron 定时任务, windows 中有对应的吗?

Windows 中有类似于 Linux 中的 cron 的调度机制,它被称为 Windows 计划任务(Windows Task Scheduler)。Windows 计划任务允许创建和管理计划任务,可以在指定的时间或事件触发时运行脚本、程序或命令。可以用来定期运行 PowerShell 脚本或其他类型的任务。一般步骤:

  1. 打开 "任务计划程序"(Task Scheduler)。可以在开始菜单中搜索 "任务计划程序" 并打开它。
  2. 在 "任务计划程序" 窗口中,点击 "创建基本任务" 或 "创建任务"。
  3. 在创建任务向导中,输入任务的名称和描述,并选择适当的触发器(例如,每天、每周或在特定时间触发)。
  4. 在 "操作" 标签页中,选择运行 PowerShell 脚本的动作。点击 "新建",选择 "启动程序",然后在 "程序/脚本" 字段中输入 PowerShell 的可执行文件路径(通常为 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe),并在 "添加参数" 字段中输入你的脚本路径和参数。
  5. 在 "条件" 和 "设置" 标签页中,根据你的需求进行任何必要的配置。例如,你可以设置任务只在计算机处于空闲状态时运行,或者设置任务的优先级和重试选项。
  6. 完成向导后,你的任务将被创建并在指定的触发条件下运行你的 PowerShell 脚本。

这样,就可以使用 Windows 计划任务来定时运行你的 PowerShell 脚本,并避免使用无限循环导致的性能问题。

使用 Windows 计划任务相对于在 PowerShell 中使用 while 循环来实现定时任务有以下利弊:

利益:

  1. 可靠性:Windows 计划任务是操作系统级别的调度机制,它可以在系统启动、用户登录、特定时间或事件等触发条件下运行任务。这意味着即使用户不登录或脚本所在的 PowerShell 会话被关闭,任务仍然会按计划运行。
  2. 灵活性:Windows 计划任务提供了丰富的触发器选项,可以根据你的需求设置任务的触发条件,例如每天、每周、每月、一次性触发等。你还可以设置任务的优先级、重试选项和条件,以满足特定的运行要求。
  3. 可管理性:通过 Windows 计划任务,你可以集中管理所有的定时任务。你可以随时查看任务的运行状态、修改任务的触发条件、停用或删除任务等。

劣势:

  1. 复杂性:相对于在 PowerShell 中使用 while 循环来实现定时任务,使用 Windows 计划任务需要进行一些额外的配置和设置,这可能会增加一些复杂性。
  2. 依赖性:使用 Windows 计划任务需要依赖操作系统提供的功能,如果在特定的系统上无法使用计划任务,那么这种方法就不适用。

总的来说,使用 Windows 计划任务可以提供更可靠和灵活的定时任务管理,尤其适用于需要长时间运行、不依赖用户登录的任务。然而,如果你只需要简单的定时任务,并且不希望进行额外的配置和设置,使用 while 循环也可以是一种简单有效的方法。

win 7 兼容性

对于 Windows 7,无法使用 New-ScheduledTaskAction 和 Register-ScheduledTask 等命令。

使用以下命令将创建一个新的计划任务,并将其配置为每5分钟触发一次。注意,此命令需要以管理员权限运行。

shell
schtasks /Create /SC MINUTE /MO 5 /TN "任务名称" /TR "执行的命令或脚本路径"

Invoke-WebRequest 是 PowerShell 3.0 版本引入的 cmdlet