Как изменить приоритет процесса запланированной задачи по умолчанию в 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:
Экспорт задачи из графического интерфейса: в Планировщике задач щелкните задачу правой кнопкой мыши, выберите "Экспорт…" и сохраните экспортированную задачу в файл.
Изменить приоритет
2.1 Откройте файл в текстовом редакторе (например, в Блокноте). Это XML, который определяет задачу. Каждое действие будет иметь раздел, содержащий<Settings>
, который содержит<Priority>
элемент.
2.2 Измените значение. Значение по умолчанию для "ниже нормального" - 7. Вы можете использовать 6, 5 или 4 для "нормального" приоритета. Обычно вы не хотите выходить за рамки "нормального". 6, вероятно, подойдет вам.
2.3. Сохраните файл (например, "c:\mytask.xml").Импортируйте задачу с помощью командной строки / 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
.
Самый простой способ сделать это будет такой. это слишком читаемо, однако я просто объясняю, как это работает и что означает каждая часть, чтобы люди не думали, что они используют плохой код.
- Откройте планировщик заданий: нажмите Win + X на клавиатуре и выберите «Планировщик заданий» в меню опытного пользователя.
- Найдите запланированную задачу, которую хотите изменить, и дважды щелкните ее, чтобы открыть ее свойства.
- В окне свойств задачи перейдите на вкладку «Действия».
- Выберите действие, связанное с задачей, и нажмите «Изменить».
- В окне «Редактировать действие» вы найдете поле «Программа/скрипт». Вместо прямого ввода пути к исполняемому файлу вы измените его, включив в него инструмент командной строки «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.