Как вы планируете задание (используя schtasks.exe) для однократного запуска и удаления самого себя?

Я хочу запланировать задачу из командной строки (используя schtasks.exe) выполнить один раз и удалить запись задачи из библиотеки планировщика заданий после ее завершения.

Просмотрев руководство по использованию, я остановился на этой команде:

schtasks / create / TN SomeTaskName / TR "notepad.exe" / SC ONCE / ST 12:00 / Z

... но это дает мне эту ошибку (я использую Windows 10)

ОШИБКА. В задании XML отсутствует обязательный элемент или атрибут.
(40,4):EndBoundary:

Посмотрев его в Интернете, я узнал об этой статье в КБ, в которой предлагается использовать /V1 переключиться, чтобы избавиться от ошибки, но при добавлении /V1 Меня просят ввести пароль текущего пользователя для планирования задачи. Я не хочу этого

Есть ли способ запланировать выполнение задачи один раз, а затем удалить из библиотеки задач после ее завершения?

Я пробовал это, но это не сработало:

schtasks / создать /TN SomeTaskName /TR "schtasks / удалить /TN SomeTaskName /F" /SC ONCE /ST 12:00

Удачное решение, которое я придумал, работает так:

schtasks / create / TN SomeTaskName / TR "notepad.exe" / SC MINUTE / MO 1 / ST 12:00 / ET 12:02 / Z

У этого есть побочный эффект выполнения задачи трижды перед остановкой.

2 ответа

Вы можете рассмотреть возможность использования Powershell, поскольку вы работаете в Windows 10. Я думаю, вы можете использовать Unregister-ScheduledTask -TaskName applog -Confirm:$false удалить запланированное задание без запроса подтверждения.

Кто-то еще сообщил о подобной проблеме, к которой пользователь рекомендовал добавить -Compatibility V1 (хотя я не уверен, что это все еще дает приглашение для ввода учетных данных пользователя).

Опция /z не работает совместно с типом запуска once. Если вы используете опцию /v1 команда выполняется без ошибок, но задача не удаляется после следующего входа в систему / выполнения.

Чтобы удалить задачу, Windows требует даты истечения срока действия, что невозможно с once.

Вы можете удалить задачу "вручную", например, используя что-то вроде этого:

... /TR "cmd.exe /c notepad.exe && schtasks /delete /TN SomeTaskName /f" ...

Эта команда выполняет notepad.exe, ожидает завершения и в случае успеха удаляет задачу SomeTaskName. Если вы хотите удалить задачу даже в случае ошибки, просто используйте один &.

Microsoft предлагает добавить /V1 вашей команде, чтобы обойти эту проблему.

https://support.microsoft.com/en-gb/kb/2004151

Это даст вам:

schtasks /create /TN SomeTaskName /TR "notepad.exe" /SC ONCE /ST 12:00 /V1 /Z

Вы можете использовать создание ScheduledJob с помощью PowerShell. В конце сценария задания вы можете удалить задание!.

Register-ScheduledJob -RunNow -Name "Archive-Scripts3"  -ScriptBlock {
  "test" | out-file -filepath c:\temp\test3.txt
  Get-ScheduledJob -Name "Archive-Scripts3" | Unregister-ScheduledJob -Force
}
Другие вопросы по тегам