首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在任务调度中添加第二个触发器

在任务调度中添加第二个触发器
EN

Stack Overflow用户
提问于 2016-09-02 18:50:15
回答 2查看 6.8K关注 0票数 5

具有powershell脚本,该脚本将创建计划任务,以便通过Octopus部署到Windows 2012服务器。

代码语言:javascript
复制
Function Create-ScheduledTask($TaskName,$RunAsUser,$TaskRun,$Schedule,$StartTime,$StartDate,$Arguments,$RunWithElevatedPermissions,$Days,$Password){
    # set up
    $Command = "schtasks.exe /create /ru `"$RunAsUser`" /tn `"$TaskName`" /tr `"'$($TaskRun)' $Arguments`" $cmdSchedule $cmdDays $cmdStartDate $cmdStartTime /F $cmdInterval $cmdDuration $cmdRunLevel $cmdPassword"

    echo $Command
    Invoke-Expression $Command            
 }

试图在命令行中添加另一个触发器作为同一任务名的一部分,将无法在schtasks.exe中工作,因为它似乎与可以执行此操作的图形用户界面相矛盾。

这是用于创建事件触发器的函数,理想情况下,用于将事件触发器附加到同一计划任务。

代码语言:javascript
复制
Function Create-ScheduledTaskEvent($TaskName,$RunAsUser,$TaskRun,$Arguments,$RunWithElevatedPermissions,$Password, $xPath, $channelName){

    $cmdRunLevel = if(-Not $RunWithElevatedPermissions){""}else{"/rl HIGHEST"}
    $cmdPassword = if([string]::IsNullOrEmpty($Password)){""}else{"/rp `"$Password`""}
    $cmdXPath = if([string]::IsNullOrEmpty($xPath)){""}else{"/sc ONEVENT /MO `"$xPath`" "}
    $cmdRunLevel = if(-Not $RunWithElevatedPermissions){""}else{"/rl HIGHEST"}

    $Command = "schtasks.exe /create $cmdRunLevel /ru `"$RunAsUser`" $cmdXPath /tn `"$TaskName`" /tr `"'$($TaskRun)' $Arguments`" /ec `"$channelName`" "

    echo $Command          
    Invoke-Expression $Command            
 }

问题是,用/change替换开关/create只会破坏前一个计划任务的触发器/操作。

您是否知道如何通过命令行上的schtasks.exe将触发器组合为一个触发器。

这可以通过使用不同的任务名创建一个单独的任务计划来完成,但这并不理想,也不是以xml格式导出任务,然后再导入回来。

EN

回答 2

Stack Overflow用户

发布于 2016-09-02 19:41:22

schtasks.exe不允许您通过基本开关执行此操作。为了能够使用schtasks.exe实现这一点,您可以使用现有任务as mentioned on SU的XML导入。

导出具有所需触发器集的现有任务,以便稍后导入。PowerShell还可以通过[xml] cast和Select-XML在本地理解xml文件,因此您不仅可以使用静态XML文件,还可以根据需要对现有文件进行动态更改。

根据您使用的系统,您还可以访问Register-ScheduledTask等PowerShell任务操作cmdlet,它允许配置多个任务。这些可以在Windows Server 2012 R2和Windows8.1上找到。从TechTarget中提取一小段代码

$triggers = @() $triggers +=新建-ScheduledTaskTrigger -Daily -At 03:00 $triggers +=新建-ScheduledTaskTrigger -Daily -At 09:00 $triggers +=新建-ScheduledTaskTrigger -Daily -At 15:00 $triggers +=新建-ScheduledTaskTrigger -Daily -At 21:00 #.....代码被截断为仅显示触发器部分$action =新-ScheduledTaskAction -Execute $pstart -Argument $actionscript寄存器-ScheduledTask -TaskName $taskname -Action $action -Trigger $triggers -RunLevel最高测试作业“-Description”

由于您已标记了2012,因此如果版本不是8.1,则可以从您自己的系统在PSSession中运行这些cmdlet

票数 2
EN

Stack Overflow用户

发布于 2016-09-02 19:35:16

我有类似的任务,我发现最优雅的解决方案是使用图形用户界面在测试环境/local PC上创建计划任务,并将其导出为XML。然后复制XML格式的文本并将其嵌入到脚本中,执行脚本后,将此字符串块保存为本地XML文件,并运行schtasks.exe来创建新任务。

代码语言:javascript
复制
schtasks.exe /create /RU "NT AUTHORITY\SYSTEM" /TN TaskName /XML "XMLFolder\TaskName.xml"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39290601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档