2016-09-02 3 views
4

У вас есть сценарий 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    
} 

Попытка добавить еще один триггер как часть одного и того же TASKNAME, в командной строке, не будет работать с 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 в командной строке, чтобы объединить триггеры в один.

Это может быть сделано путем создания отдельного расписания задач с различным TASKNAME, он не идеален, хотя и не вывозит из задачи, как XML, а затем импортировать обратно.

ответ

0

У меня похожая задача и наиболее элегантное решение, Я нашел, чтобы создать задачу расписания в тестовой среде/локальном ПК с помощью графического интерфейса пользователя и экспортировать его как XML. Затем скопируйте текст в формате XML и вложите его в скрипт, после выполнения сценарий сохраните этот строковый блок как файл XML локально и запустите файл schtasks.exe для создания новой задачи.

schtasks.exe /create /RU "NT AUTHORITY\SYSTEM" /TN TaskName /XML "XMLFolder\TaskName.xml" 
+0

ли упоминать, что экспорт/Импорт XML не идеален. Спасибо хоть. – tombags

+0

Да, я сеял. Но это единственное относительно простое решение для решения, которое я нашел. Вы можете расширить его и динамически изменить XML, если вам нужно. Как @Matt спрашивает, почему вы не хотите использовать метод XML? – autosvet

0

schtasks.exe не позволит вам сделать это с помощью основных переключателей. Чтобы сделать это с помощью schtasks.exe, вы можете использовать импорт XML из существующей задачи, as mentioned on SU.

Scheduled Tasks GUI

Возьмите экспорт существующей задачи с триггером вы хотите установить, что вы можете импортировать позже. PowerShell также может естественным образом понимать файлы xml через листинг [xml] и Select-XML, поэтому вы не ограничены статическими XML-файлами, но можете также внести изменения «на лету» в существующие, если хотите.

В зависимости от того, какой системы вы работаете от вы также можете иметь доступ к PowerShell манипуляционных задач командлетам как 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 вы можете быть в состоянии выполнить эти командлеты в виде PSSession из вашей системы, если это не 8,1

+0

Будет ли это работать и для добавления события ?, e..g ATaskName будет иметь одно действие, которое выполняется в 1:00, также будет событие, которое ищет идентификатор события и действует соответственно? – tombags

+2

Хммм ... этот меня ускользает. Я исследую. Запланировка, запуск и время с помощью New-ScheduledTaskTrigger.однако не вижу ссылок на события. – Matt

+0

Нашли, что использование '/ sc ONEVENT' clobbers любого существующего'/sc WEEKLY | DAILY' и т. Д. – tombags

Смежные вопросы