拥有一个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然后再导入回来。
2条答案
按热度按时间js81xvg61#
schtasks.exe
不允许您通过基本开关执行此操作。为了能够使用schtasks.exe
执行此操作,您可以使用现有任务as mentioned on SU的XML导入。导出具有所需触发器集的现有任务,以便稍后导入。PowerShell还可以通过
[xml]
转换和Select-XML
在本机理解xml文件,因此您不限于静态XML文件,还可以根据需要动态更改现有文件。根据您使用的系统,您还可以访问PowerShell任务操作cmdlet,如
Register-ScheduledTask
,它允许配置多个任务。这些cmdlet可在Windows Server 2012 R2和Windows 8.1上找到。要从TechTarget提取一个小代码段由于您标记了2012,因此如果不是8.1,您可能可以从自己的系统在PSSession中运行这些cmdlet
nr9pn0ug2#
我有类似的任务,我发现最好的解决方案是使用GUI在测试环境/本地PC上创建调度任务,并将其导出为XML。然后复制XML格式的文本并将其嵌入脚本中,执行脚本后,将此字符串块保存为本地XML文件,并运行schtasks.exe创建新任务。