编辑 Windows 任务计划程序任务的触发器

Posted

技术标签:

【中文标题】编辑 Windows 任务计划程序任务的触发器【英文标题】:Edit triggers for a Windows Task Scheduler Task 【发布时间】:2013-03-01 19:54:38 【问题描述】:

我们目前在 server 2008 机器上的 Windows 任务计划程序中安排了数百个任务。有许多任务无限期地每半小时运行一次。有没有办法使用脚本来更改这些任务的触发器,以便它们只在 M-F 半小时运行一次?

【问题讨论】:

任务如何命名?您是否遵循命名约定? 我们做到了!项目名称 - Job_Name_foo 这是肯定的,我正在尝试一个解决方案,我们可以使用 VBS 递归处理 XML 并将 ScheduleByDaily 更改为 ScheduleByWeek,然后为 MON、TUE、WED 添加空子节点,THU,FRI...唯一的问题是我对VBS不是特别熟悉 哈哈,我听说 =] 通过这些实现一些东西应该不难。感谢您的所有帮助! 【参考方案1】:

是的,如果您使用TaskService COM object。有关使用此对象的一些示例脚本,请参见以下内容:

    Rename Scheduled Tasks in Windows 7, Windows Server 2008, and Windows Vista

    How-To: Use PowerShell to Report on Scheduled Tasks

    Updating a Scheduled Task's Credentials

    脚本:https://gist.github.com/Bill-Stewart/363fdf761499a071439c8ac0c18dcd54

在 Windows XP/Server 2003 之后,使用 schtasks.exe 实用程序相当有限。

【讨论】:

我认为您需要为此更新到 PS v3。 microsoft.com/en-us/download/details.aspx?id=34595 我写的脚本(见上面的链接)只需要版本 2;第 3 版不是必需的。 Bill,这就是我最终的结果,非常感谢您的指导 很高兴你们知道了!【参考方案2】:

以下是 /SC 的允许选项:

/SC allows for the following frequency schedules:
        MINUTE:     1 - 1439 minutes.
        HOURLY:     1 - 23 hours.
        DAILY:      1 - 365 days.
        WEEKLY:     weeks 1 - 52. (/D MON,TUE,WED,THU,FRI,SAT,SUN)
        ONCE:       No modifiers.
        ONSTART:    No modifiers.
        ONLOGON:    No modifiers.
        ONIDLE:     No modifiers.
        MONTHLY:    1 - 12, or FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY.**

我一直在编辑这个,因为我对我的发现不满意...

我查看了 SCHTASKS 并注意到您无法通过 CMD 更改时间表。

来自technet.microsoft 更改任务的以下一项或多项属性。

任务运行的程序 (/tr)。 运行任务的用户帐户 (/ru)。 用户帐户的密码 (/rp)。

我将继续对此进行一些研究,并希望通过可行的解决方案编辑此答案。

编辑 如果你查看 C:\windows\system32\tasks 你会发现你所有的计划任务 它们没有被列为 XML,但它们确实是 XML 我认为应该做的是使用任何一个; VBS 或 C# 应用程序挖掘到以下每个节点 //Task/Triggers/CalendarTrigger 删除 /ScheduleByDay 及其子节点 /DaysInterval //Task/Triggers/CalendarTrigger 创建如下:

 <?xml version="1.0" encoding="UTF-16"?>
   -<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.2"> 
     +<RegistrationInfo> 
     -<Triggers> 
       -<CalendarTrigger>
            <StartBoundary>2013-03-13T15:20:00</StartBoundary>
            <Enabled>true</Enabled> 
             -<ScheduleByWeek> 
               -<DaysOfWeek> 
                    <Monday/>
                    <Tuesday/> 
                    <Wednesday/> 
                    <Thursday/> 
                    <Friday/> 
                </DaysOfWeek>
                <WeeksInterval>1</WeeksInterval> 
              </ScheduleByWeek> 
       </CalendarTrigger> 
     </Triggers>

如果有人能接受并使用这个 - 我认为我在下周可以做很多事情。

【讨论】:

IIRC,新的任务计划程序 API 的 schtasks.exe 命令非常有限。这就是为什么我建议直接使用 COM 对象访问调度程序。 @AbqBill 是的,我明白了……很臭 :( 不知道为什么我一直为此投票,我不一定提供任何解决方案:P 我仍在寻找... 它得到了没有实际尝试过的人的支持。 :) 我看了一些,Windows(对我来说很不幸)对这些任务文件进行哈希处理,将它们存储在注册表中,并将哈希值与文件进行比较,这样您就无法真正编辑它们。该死的微软,让事情变得安全!

以上是关于编辑 Windows 任务计划程序任务的触发器的主要内容,如果未能解决你的问题,请参考以下文章

Windows 任务计划程序每日触发器运行持续时间为

windows计划任务

Windows 任务计划程序执行PHP脚本

在 Windows 任务计划程序中停止重复触发,直到第二天

Windows通过定时计划任务执行bat文件

Windows通过定时计划任务执行bat文件