Добавление второго триггера в расписание задач

Имейте сценарий 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            
 }

Проблема в том, что замена переключателя /create на /change приводит только к сбою триггера / действия предыдущей запланированной задачи.

Есть идеи, как это можно сделать с помощью schtasks.exe в командной строке, чтобы объединить триггеры в один.

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


person tombags    schedule 02.09.2016    source источник


Ответы (2)


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

Графический интерфейс запланированных задач

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

В зависимости от того, с какой системой вы работаете , вы также можете иметь доступ к командлетам для управления задачами PowerShell, таким как _ 5_, что позволяет настраивать несколько задач. Их можно найти в 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.

person Matt    schedule 02.09.2016
comment
Будет ли это работать и для добавления события? Например, ATaskName будет иметь одно действие, которое запускается в час ночи, а также событие, которое ищет идентификатор события и действует соответственно? - person tombags; 02.09.2016
comment
Хммм ... этот ускользает от меня. Я исследую. New-ScheduledTaskTrigger охватывает вход в систему, запуск и время…. ​​Однако не вижу ссылки на события. - person Matt; 02.09.2016
comment
Обнаружил, что с помощью /sc ONEVENT clobbers любые существующие /sc WEEKLY|DAILY и т. Д. - person tombags; 02.09.2016
comment
Почему xml не идеален для вас, кстати? - person Matt; 02.09.2016
comment
это настраиваемый шаг в развертывании Octopus, который должен быть как можно более универсальным для других развертываний. - person tombags; 02.09.2016

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

schtasks.exe /create /RU "NT AUTHORITY\SYSTEM" /TN TaskName /XML "XMLFolder\TaskName.xml"
person autosvet    schedule 02.09.2016
comment
Упомянул, что экспорт / импорт XML не идеален. Спасибо хоть. - person tombags; 02.09.2016
comment
Да, я это сею. Но это единственное относительно простое для реализации решение, которое я нашел. При необходимости вы можете расширить его и динамически изменять XML. Как @Matt спрашивает, почему вы не хотите использовать способ XML? - person autosvet; 02.09.2016