Как изменить приоритет процесса запланированной задачи по умолчанию в Windows

Я проверял это некоторое время сейчас. У нас есть сценарий, который создает запланированное задание, и кажется, что, как описано во многих местах в сети, приоритет задания, который получает этот процесс и его потомки, равен 7:BelowNormal

Теперь это вызывает много проблем в нашей тестовой среде, которых я бы хотел избежать

Вопрос в том, смогу ли я создать объект групповой политики, чтобы переопределить приоритет запланированных задач Windows по умолчанию, чтобы все новые запланированные задачи получили приоритет X (в моем случае X - "Нормальный")

Я знаю, что есть возможность установить приоритет запланированной задачи при создании, но я бы хотел этого избежать, чтобы у каждой новой задачи был правильный приоритет по умолчанию, а не ниже нормального

заранее спасибо

4 ответа

Решение

Вы можете редактировать существующее задание, добавив опцию настроек

$currentTask = Get-ScheduledTask -TaskName $taskName 
$settings = New-ScheduledTaskSettingsSet
$settings.Priority = 4
Set-ScheduledTask -TaskName $taskName -Trigger $currentTask.Triggers -Action $currentTask.Actions -Settings $settings -User "user" -Password "pass"

Другой способ сделать это без использования PowerShell:

  1. Экспорт задачи из графического интерфейса: в Планировщике задач щелкните задачу правой кнопкой мыши, выберите "Экспорт…" и сохраните экспортированную задачу в файл.

  2. Изменить приоритет
    2.1 Откройте файл в текстовом редакторе (например, в Блокноте). Это XML, который определяет задачу. Каждое действие будет иметь раздел, содержащий<Settings>, который содержит <Priority>элемент.
    2.2 Измените значение. Значение по умолчанию для "ниже нормального" - 7. Вы можете использовать 6, 5 или 4 для "нормального" приоритета. Обычно вы не хотите выходить за рамки "нормального". 6, вероятно, подойдет вам.
    2.3. Сохраните файл (например, "c:\mytask.xml").

  3. Импортируйте задачу с помощью командной строки / schtasks:
    schtasks /DELETE /tn "\TASKSCHEDULER-FOLDER-PATH\TASK-IMPORT-NAME" (вам нужно сначала удалить существующую задачу, чтобы создать новую из командной строки с помощью schtasks)
    schtasks /create /xml "c:\mytask.xml" /tn "\TASKSCHEDULER-FOLDER-PATH\TASK-IMPORT-NAME"

Для этого у меня было 220 машин, поэтому я сделал это так. Поскольку все машины имели одинаковую конфигурацию, я мог скопировать один и тот же XML-файл на все машины и воссоздать запланированную задачу на основе XML. См. Более подробную информацию о различных приоритетах здесь. Этот ответ был основан на этой статье.

К сожалению, вы не можете изменить приоритет по умолчанию. Но вы можете использовать Set-ScheduledTaskизменить существующую задачу.

      $task = Get-ScheduledTask -TaskName '...' // Your task's name
$settings = $task.Settings
$settings.Priority = 4
// For possible values see https://docs.microsoft.com/en-us/windows/win32/taskschd/tasksettings-priority#remarks
Set-ScheduledTask -TaskName $taskName -Settings $settings

В отличие от ответа Алекса Портного, здесь сохраняются другие настройки, такие как WakeToRun.

Самый простой способ сделать это будет такой. это слишком читаемо, однако я просто объясняю, как это работает и что означает каждая часть, чтобы люди не думали, что они используют плохой код.

  1. Откройте планировщик заданий: нажмите Win + X на клавиатуре и выберите «Планировщик заданий» в меню опытного пользователя.
  2. Найдите запланированную задачу, которую хотите изменить, и дважды щелкните ее, чтобы открыть ее свойства.
  3. В окне свойств задачи перейдите на вкладку «Действия».
  4. Выберите действие, связанное с задачей, и нажмите «Изменить».
  5. В окне «Редактировать действие» вы найдете поле «Программа/скрипт». Вместо прямого ввода пути к исполняемому файлу вы измените его, включив в него инструмент командной строки «cmd.exe» вместе с необходимыми параметрами.

Например, предположим, что ваша исходная команда была: C:\data\app\taskname.exe.

Замените его следующим: cmd.exe /c start /b /low /wait C:\data\app\taskname.exe.

В измененной команде:

cmd.exe: запускает командную строку. /c: выполняет команду, указанную в следующей строке, а затем завершает работу.

start: запускает новое окно командной строки для выполнения задачи.

/b: запускает приложение без создания нового окна командной строки.

/low: запускает приложение с низким приоритетом. можно заменить на высокий нормальный и т. д. никогда в реальном времени.

/wait: заставляет командную строку ждать завершения задачи перед выходом.

Обратите внимание: хотя этот обходной путь не требует отдельного пакетного сценария, для достижения желаемого результата он по-прежнему использует инструмент командной строки cmd.exe.

Другие вопросы по тегам