具有powershell脚本,该脚本将创建计划任务,以便通过Octopus部署到Windows 2012服务器。
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中工作,因为它似乎与可以执行此操作的图形用户界面相矛盾。
这是用于创建事件触发器的函数,理想情况下,用于将事件触发器附加到同一计划任务。
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格式导出任务,然后再导入回来。
发布于 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
发布于 2016-09-02 19:35:16
我有类似的任务,我发现最优雅的解决方案是使用图形用户界面在测试环境/local PC上创建计划任务,并将其导出为XML。然后复制XML格式的文本并将其嵌入到脚本中,执行脚本后,将此字符串块保存为本地XML文件,并运行schtasks.exe来创建新任务。
schtasks.exe /create /RU "NT AUTHORITY\SYSTEM" /TN TaskName /XML "XMLFolder\TaskName.xml"https://stackoverflow.com/questions/39290601
复制相似问题