使用 Windows 任务计划程序调用计划的 Runbook

本文是我的上一篇文章超酷工具:用于启动 Runbook 的新命令行实用工具的后续内容,在上一篇文章中,我讨论了使用 Web 服务通过命名参数快速启动 Runbook 的方法。现在该将它付诸行动了!

Orchestrator 管理员知道 Orchestrator 不是作为一个日程安排工具而设计的。没错,它可以使用“监视日期/时间”活动主动地定期启动新的 Runbook 作业。问题是它有点笨拙。假设我想让一个 Runbook 在每周一的晚上 10:15 运行。下面是我要执行的操作:

  1. 在我的 Runook 的开头放置一个“监视日期/时间”活动并将它设置为每小时运行一次,在整点后 15 分钟发生。
  2. 创建一个计划(在“全局设置”下),将它命名为“Monday 10-11”,并对其进行设置,以便它在每周一运行,并且唯一允许的一个小时是晚上 10 点到晚上 11 点之间。
  3. 向 Runbook 中添加一个“检查日程安排”活动并将其指向刚创建的日程安排。
  4. 更改从“检查日程安排”活动到下一个活动的链接条件,以便仅在当前时间符合日程安排要求时才触发下一个活动。

下面是步骤 1 至步骤 4 的屏幕截图:

现在该过程将会提供我所需的结果。“检查日程安排”活动之后的活动将在每周一的晚上 10:15 运行。因此,它的笨拙之处此时就显现出来了:

  • 此 Runbook 是一个监视器,它始终运行,因而始终会消耗策略限制中的一个可用位置
  • 当您有多个以类似方式设置的计划 Runbook 时,它们全都始终运行并消耗您的策略限制。
  • 该 Runbook 将每小时触发一次“检查日程安排”活动。一天 24 小时 x 7 天等于 168(没错,我不得不使用计算器)。
  • 因此,每周此 Runbook 将触发 167 次,然后在“检查日程安排”活动处停止。
  • 它将在该活动后继续运行,每周运行一次。
  • 这意味着 Orchestrator 控制台中有 167 个条目显示某个已运行的作业,而该作业实际上未执行任何操作。这会严重分散管理员的注意力。
  • 现在将该数字乘以您拥有的所有计划 Runbook 数量。
  • 无法轻松地(甚至几乎不可能)获得计划的 Runbook 的列表以便您很快知道“我有一个 Runbook 在今天晚上 9 点开始,另一个在晚上 10 点开始”。

因此现在您明白为什么我们总是说 Orchestrator *可以* 执行计划的 Runbook,但它并非设计为一个日程安排工具?既然您已经知道 *不* 应该做什么,下面是使用类似 Windows 任务计划程序之类的简单工具轻松进行日程安排的方法。它安装在每个 Windows Server 上,因此您必须购买其他工具的可能性不大。但是,如果您已经有某种企业日程安排工具,则可以将该知识运用到该工具并获得相同的好处。

首先,我打开了任务计划程序并创建了一个名为 System Center 2012 Orchestrator 的新文件夹。您可以简单地将它称为 Orchestrator,但如果我不正确使用该术语,身边负责市场营销/品牌推广的这帮人就会用木(可降解)勺子打我了。

然后,您只需右键单击并选择“创建任务”以打开“创建任务”窗体。

SNAGHTML498f982

在该窗体中,输入名称和说明,并将任务设置为“不管用户是否登录都要运行”(因为它是一个自动运行的 Web 服务)。

单击“触发器”选项卡,然后单击“新建”。假定我要保留周一晚上 10:15 这一时间安排。它看起来将如下所示:

显而易见,这里有一些可以设置的选项,如果没有某种复杂的 PowerShell 脚本或类似内容,甚至无法在 Runbook 中复制这些选项,例如时区同步、随机延迟、到期时间等等。当我单击“确定”时,该日程安排将被保存,如果我想混合每月和每日或某种其他日程安排组合,实际上可在此处添加许多日程安排。

单击“操作”选项卡 – 这是触发 Runbook 的位置。单击“新建”,将出现“新建操作”窗体。我选择“启动程序”,然后输入 SCOJobRunner.exe 实用工具的路径以及启动 Runbook 所需的命令行参数。如果我在 Orchestrator Web 服务所在的同一服务器上运行此工具,就无需指定 Web 服务器或凭据(凭据已经在任务定义中指定)。我只需要指定 Runbook ID 或路径以及所需参数(如果有)。例如:

-RunbookPath:"\Scheduled Runbooks\Run My Script" -Parameters:"Path='Path 1';Other Text='some other text here'"

注意到我如何聪明地使用了名为“Scheduled Runbooks”的文件夹了吗?这将告诉我(或使用 Runbook Designer 或 Orchestration 控制台的任何其他人),该文件夹中的所有 Runbook 都按计划运行。

单击“确定”会将我带回“操作”选项卡,在那里我甚至可以添加更多操作(例如,如果我想在同一计划时间运行多个 Runbook)。

现在,单击“条件”选项卡。在这里我可以指定任务运行或不运行的条件(仔细想想)。由于这是一台服务器,我通常可以保留所有设置不动。不过,如果您碰巧在便携式计算机上进行 Orchestrator 演示,则应该取消选中这些交流电源和电池选项。

最后,单击“设置”选项卡。此时,您可以根据需要定义一些额外选项。对于我而言,我将保留默认值。

单击“确定”将会提示输入用于运行此任务的凭据。输入凭据并单击“确定”,您会回到主任务计划程序页,在那里您可以看到该新任务。

SNAGHTML4acad18

因此,现在如果您想添加更多计划的 Runbook,只需按相同的方式添加即可,现在您会拥有一个方便访问的 Runbook 及其开始时间的列表,它甚至会显示 Runbook 的下次运行时间。通过单击下面的“历史记录”选项卡,您甚至可以看到任务的所有运行时间和结果的列表。

与创建“监视 Runbook”相比,此方法的好处有:

  1. 您不会有持续运行的监视 Runbook
  2. 您不会触发许多 Runbook 不必要地启动(例如触发 168 次只为了成功运行一次),因此不会让列表被“垃圾”填满
  3. 您拥有一个计划启动的所有 Runbook 的方便列表,并且您可以从一个位置控制所有这些 Runbook。

希望这篇文章教会了您在 Orchestrator 中进行日程安排、有关监视器的些许知识(以后再详细介绍该主题)以及如何正确使用我在上一篇博文中提到的命令行工具。

在此处下载包含实用工具的 zip 文件:SCO Job Runner - 命令行实用工具

在此处下载实用工具的源代码:https://orchestrator.codeplex.com/SourceControl/list/changesets

下次再见!