python操作Windows任务计划程序

该文介绍如何使用Python的win32com模块连接Windows任务计划程序,创建一个新的任务来执行指定的exe程序或CMD命令。任务设置包括每日执行、30秒后开始、每5分钟重复以及在任务失败时重启。任务名为ServerMonitor,由脚本创建并注册。
摘要由CSDN通过智能技术生成

使用python操作Windows任务计划程序

最低支持服务器:Windows Server 2008
以下参考网站 替换 en-us > zh-cn 即可查看 中文文档(为机器翻译可能不太准确)
参考网站: https://learn.microsoft.com/en-us/windows/win32/taskschd/time-trigger-example–scripting-
当前以 每5分钟执行test.exe 作为场景举例
在这里插入图片描述

连接服务,并创建任务对象
https://learn.microsoft.com/zh-cn/windows/win32/taskschd/taskfolder

# 连接计划任务服务
scheduler = win32com.client.Dispatch('Schedule.Service')
scheduler.Connect()

# 创建任务对象
# 获取任务定义的文件夹
root_folder = scheduler.GetFolder('\\')
# 创建对象 flags参数为0 固定
task_def = scheduler.NewTask(0)

设置任务动作 执行exe脚本 或者 执行 CMD命令
https://learn.microsoft.com/en-us/windows/win32/taskschd/execaction

TASK_ACTION_EXEC = 0
action = task_def.Actions.Create(TASK_ACTION_EXEC)
action.ID = 'TEST'
# 脚本只需 设置Path 为脚本绝对路径即可
action.Path = r"E:\test.exe"
# action.Path = "netstat"
# action.Arguments = "-ano"

设置任务信息
https://learn.microsoft.com/en-us/windows/win32/taskschd/task-registration-information

task_def.RegistrationInfo.Description = '定时任务描述'  # 任务描述
task_def.RegistrationInfo.Author = "脚本创建"   # 创建者

定时任务设置
https://learn.microsoft.com/en-us/windows/win32/taskschd/tasksettings

# 为“任务计划程序”设置任务设置信息 创建一个 TaskSettings 对象。
task_def.Settings.Enabled = True
# task_def.Settings.StopIfGoingOnBatteries = False
# 超过其计划时间后的任何时间启动任务
task_def.Settings.StartWhenAvailable = True
task_def.Settings.Hidden = False
# 设置 如果任务失败,按以下频率重新启动
task_def.Settings.RestartCount = 3  # 任务计划程序尝试重启任务的次数。
# 该值指定任务计划程序尝试重启任务的时间 必须设置 RestartCount 属性
task_def.Settings.RestartInterval = "PT20M"

创建基于时间的触发器
https://learn.microsoft.com/en-us/windows/win32/taskschd/timetrigger

# 指定每日触发器的常量。1:只运行一次, 2: 每日执行
TASK_TRIGGER_TIME = 2
# 创建一个每日触发器。
trigger = task_def.Triggers.Create(TASK_TRIGGER_TIME)

# 当前时间30秒后执行该任务  必要参数
# isoformat() 转换时间格式: YYYY-MM-DDTHH:MM:SS
trigger.StartBoundary = (datetime.now() + timedelta(seconds=30)).isoformat()
# 获取或设置触发器停用的日期和时间。
# trigger.EndBoundary = (datetime.now() + timedelta(minutes=5)).isoformat()
trigger.Id = "DailyTriggerId"
# 是否启用触发器。
trigger.Enabled = True

设置重复模式 设置为interval间隔执行一次
https://learn.microsoft.com/en-us/windows/win32/taskschd/repetitionpattern

# 重复模式的时间。PnYnMnDTnHnMnS PT5M指定5分钟 如果未为持续时间指定任何值,则模式将无限期重复。
trigger.Repetition.Interval = "PT5M"

注册任务
https://learn.microsoft.com/en-us/windows/win32/taskschd/taskfolder-registertaskdefinition

# 注册任务 
TASK_CREATE_OR_UPDATE = 6
TASK_LOGON_NONE = 0
root_folder.RegisterTaskDefinition(
    "ServerMonitor",  # 任务的名称
    task_def,  # 构建的任务(有动作数据、触发数据、描述数据等)
    TASK_CREATE_OR_UPDATE,	# 如果任务存在,则更新任务
    '',  # 用于注册任务的用户凭据
    '',  # 用于注册任务的userId的密码
    TASK_LOGON_NONE     # 未指定登录方法。
)

整体代码

from datetime import datetime, timedelta

import win32com.client

# 连接计划任务服务
scheduler = win32com.client.Dispatch('Schedule.Service')
scheduler.Connect()

# 创建任务对象
# 获取任务定义的文件夹
root_folder = scheduler.GetFolder('\\')
# 创建对象 flags参数为0 固定
task_def = scheduler.NewTask(0)

TASK_ACTION_EXEC = 0
action = task_def.Actions.Create(TASK_ACTION_EXEC)
action.ID = 'TEST'
# 脚本只需 设置Path 为脚本绝对路径即可
action.Path = r"E:\test.exe"
# action.Path = "netstat"
# action.Arguments = "-ano"

task_def.RegistrationInfo.Description = '定时任务描述'  # 任务描述
task_def.RegistrationInfo.Author = "脚本创建"  # 创建者

# 为“任务计划程序”设置任务设置信息 创建一个 TaskSettings 对象。
task_def.Settings.Enabled = True
# task_def.Settings.StopIfGoingOnBatteries = False
# 超过其计划时间后的任何时间启动任务
task_def.Settings.StartWhenAvailable = True
task_def.Settings.Hidden = False
# 设置 如果任务失败,按以下频率重新启动
task_def.Settings.RestartCount = 3  # 任务计划程序尝试重启任务的次数。
# 该值指定任务计划程序尝试重启任务的时间 必须设置 RestartCount 属性
task_def.Settings.RestartInterval = "PT20M"

# 指定每日触发器的常量。1:只运行一次, 2: 每日执行
TASK_TRIGGER_TIME = 2
# 创建一个每日触发器。
trigger = task_def.Triggers.Create(TASK_TRIGGER_TIME)

# 当前时间30秒后执行该任务  必要参数
# isoformat() 转换时间格式: YYYY-MM-DDTHH:MM:SS
trigger.StartBoundary = (datetime.now() + timedelta(seconds=30)).isoformat()
# 获取或设置触发器停用的日期和时间。
# trigger.EndBoundary = (datetime.now() + timedelta(minutes=5)).isoformat()
trigger.Id = "DailyTriggerId"
# 是否启用触发器。
trigger.Enabled = True

# 重复模式的时间。PnYnMnDTnHnMnS PT5M指定5分钟 如果未为持续时间指定任何值,则模式将无限期重复。
trigger.Repetition.Interval = "PT5M"

# 注册任务
TASK_CREATE_OR_UPDATE = 6
TASK_LOGON_NONE = 0
root_folder.RegisterTaskDefinition(
    "ServerMonitor",  # 任务的名称
    task_def,  # 构建的任务(有动作数据、触发数据、描述数据等)
    TASK_CREATE_OR_UPDATE,  # 如果任务存在,则更新任务
    '',  # 用于注册任务的用户凭据
    '',  # 用于注册任务的userId的密码
    TASK_LOGON_NONE  # 未指定登录方法。
)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值