Как вы планируете задание (используя 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
}