在任务计划中添加第二个触发器

tom*_*ags 5 powershell octopus-deploy windows2012

有一个 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            
 }
Run Code Online (Sandbox Code Playgroud)

尝试在命令行上添加另一个触发器作为相同任务名称的一部分将不起作用,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            
 }
Run Code Online (Sandbox Code Playgroud)

问题是,更换开关/create/change唯一的方式结束了重挫以前的计划任务的触发/动作。

任何想法如何通过schtasks.exe命令行来完成,将触发器合并为一个。

可以通过创建具有不同任务名称的单独任务计划来完成,但这并不理想,也不是将任务导出为 xml 然后重新导入。

aut*_*vet 1

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

schtasks.exe /create /RU "NT AUTHORITY\SYSTEM" /TN TaskName /XML "XMLFolder\TaskName.xml"
Run Code Online (Sandbox Code Playgroud)