通过脚本批量修改windows任务计划

需求:修改已有的windows任务计划

方法:

一、通过python实现

需要安装pywin32模块

pip install pywin32

 查询任务计划列表

#查询任务计划列表
import win32com.client
 
TASK_ENUM_HIDDEN = 1
TASK_STATE = {0: 'Unknown',
              1: 'Disabled',
              2: 'Queued',
              3: 'Ready',
              4: 'Running'}
 
scheduler = win32com.client.Dispatch('Schedule.Service')
scheduler.Connect()
 
n = 0
folders = [scheduler.GetFolder('\\rpa')]
while folders:
    folder = folders.pop(0)
    folders += list(folder.GetFolders(0))
    tasks = list(folder.GetTasks(TASK_ENUM_HIDDEN))
    n += len(tasks)
    for task in tasks:
        print('Task: %s' % task.Definition.Triggers[0].StartBoundary)
        settings = task.Definition.Settings
        print('Path       : %s' % task.Path)
        print('Hidden     : %s' % settings.Hidden)
        print('State      : %s' % TASK_STATE[task.State])
        print('Last Run   : %s' % task.LastRunTime)
        print('Last Result: %s\n' % task.LastTaskResult)
        print('Last Result: %s\n' % task.GetRunTimes)
        task.Enabled = True # True表示啟用,False表示停用
        task.Run('VT_NULL')
        status = task.Stop(0) # 0表示立即停止
        print('Stop status: %s\n' % status)
        print('State      : %s' % TASK_STATE[task.State])
print('Listed %d tasks.' % n)

操作任务计划列表

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  # 未指定登录方法。
)

二、通过bat脚本实现

1.直接操作

@echo off
set "taskName=test"
set "newArguments=新参数"

REM 获取任务计划的XML配置
schtasks /query /tn "%taskName%" /xml > TaskConfig.xml

@REM REM 使用For循环遍历导出的XML文件
@REM for /F "tokens=*" %%A in ('type TaskConfig.xml') do (
@REM   REM 查找并替换任务计划的参数
@REM   set "line=%%A"
@REM   setlocal enabledelayedexpansion
@REM   set "line=!line:%oldArguments%=%newArguments%!"
@REM   echo !line!>> TaskConfigUpdated.xml
@REM   endlocal
@REM )

@REM REM 删除旧的任务计划
@REM schtasks /delete /tn "%taskName%" /f

@REM REM 创建更新后的任务计划
@REM schtasks /create /tn "%taskName%" /xml TaskConfigUpdated.xml

@REM REM 删除临时文件
@REM del TaskConfig.xml TaskConfigUpdated.xml

@REM echo 任务计划的参数已成功修改。

2.通过导出文件再操作 

先把修改完的计划任务导出

文件内容

 再通过脚本导入

@echo off
REM 设定任务名
set "taskName=test"
REM 删除任务
schtasks /delete /tn "%taskName%" /f
REM 根据文件创建任务
schtasks /Create /XML "C:\test2.xml" /TN "%taskName%"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用DOS批处理脚本批量导入Windows计划任务,可以使用以下脚本: chcp 437 @echo off cls setlocal EnableDelayedExpansion set runasUsername=name set runasPassword=pass if %1. == import. call :import exit /b 0 :import for %%f in (tasks\*.xml) do ( call :importfile "%%f" ) exit /b 0 :importfile set filename=%1 rem 替换掉#符号和.xml来获得任务名称 set taskname=%filename:#=% set taskname=%taskname:tasks\=% set taskname=%taskname:.xml=% schtasks /create /ru %runasUsername% /rp %runasPassword% /tn %taskname% /xml %filename% 以上脚本批量导入位于tasks文件夹中的.xml文件作为计划任务。确保将任务的用户名和密码设置为正确的值,并将脚本中的name和pass替换为对应的值。 注意:在运行脚本之前,需要先将要导入的计划任务的.xml文件放入tasks文件夹中。 请注意,这只是一个示例脚本,具体的实现方式可能因操作系统版本和具体需求而有所不同。请根据自己的情况进行相应的修改和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [批量导入导出windows计划任务的批处理脚本](https://blog.csdn.net/yyusea/article/details/78552581)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值