有一个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
一起使用,这似乎与可以完成的GUI相矛盾。
这是用于创建事件触发器的函数,理想情况是将其附加到同一个计划任务。
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
}
问题是,用/create
替换开关/change
只会破坏先前计划任务的触发/操作。
任何想法如何通过命令行上的schtasks.exe
来完成,将触发器组合成一个。
可以通过创建具有不同任务名称的单独任务计划来完成,但这不是理想的,也不是将任务导出为xml然后导入。
答案 0 :(得分:0)
我有类似的任务,我发现最优雅的解决方案是使用GUI在测试环境/本地PC上创建计划任务并将其导出为XML。然后复制XML格式的文本并将其嵌入到脚本中,执行后脚本将此字符串块保存为本地XML文件并运行schtasks.exe以创建新任务。
schtasks.exe /create /RU "NT AUTHORITY\SYSTEM" /TN TaskName /XML "XMLFolder\TaskName.xml"
答案 1 :(得分:0)
schtasks.exe
不允许您通过基本开关执行此操作。为了能够使用schtasks.exe
执行此操作,您可以使用现有任务的as mentioned on SU的XML导入。
使用您希望稍后导入的触发器设置导出现有任务。 PowerShell还可以通过[xml]
强制转换和Select-XML
本地理解xml文件,因此您不仅可以使用静态XML文件,还可以根据需要随时更改现有文件。
根据从工作的系统,您还可以访问PowerShell任务操作cmdlet,例如Register-ScheduledTask
,它允许配置多个任务。这些可以在Windows Server 2012 R2和Windows 8.1上找到。从TechTarget
$triggers = @() $triggers += New-ScheduledTaskTrigger -Daily -At 03:00 $triggers += New-ScheduledTaskTrigger -Daily -At 09:00 $triggers += New-ScheduledTaskTrigger -Daily -At 15:00 $triggers += New-ScheduledTaskTrigger -Daily -At 21:00 #..... code truncated to only show trigger portion $action = New-ScheduledTaskAction -Execute $pstart -Argument $actionscript Register-ScheduledTask -TaskName $taskname -Action $action -Trigger $triggers -RunLevel Highest -Description “Test job”
自从您标记了2012以来,如果它不是8.1,您可能可以在自己的系统中运行PSSession中的cmdlet