Использование планировщика задач для запуска задачи перед выключением
На момент написания, единственные доступные опции - "Начать задачу":
- По расписанию
- При входе
- При запуске
- На холостом ходу
- На мероприятии
- При изменении / создании задачи
- При подключении к сеансу пользователя
- При отключении от сеанса пользователя
- На блокировке рабочей станции
- На рабочей станции разблокировать
Есть ли способ, чтобы планировщик заданий запускал задачу перед выключением?
4 ответа
Несмотря на то, что это старая ветка, я хотел бы добавить разработанное мной решение, которое хорошо работает.
Я хотел запускать сценарий или командный файл всякий раз, когда инициировалось завершение работы или перезапуск, но я не хотел использовать функцию сценариев завершения групповой политики. Причина этого была довольно глубокой, но мне нужно было запустить скрипт, прежде чем некоторые службы были закрыты.
В итоге я создал запланированное задание следующим образом:
- Тип: По событию (Основной)
- Журнал: Система
- Источник: User32
- EventID: 1074
Когда пользователь или команда инициирует завершение работы или перезапуск как зарегистрированный пользователь или от имени пользователя, событие с кодом 1074 будет инициировано. Создав задачу, которая будет использовать его для запуска сценария, он запустит сценарий и даст ему возможность завершиться, однако он будет сообщать о задаче как о "работающей" или "запущенной" в журналах. Я не использовал это для длинных сценариев, так что, возможно, стоит продолжить тестирование, но он отлично работает для коротких сценариев.
Вы можете создавать задачи завершения работы с помощью редактора групповой политики в Windows 7.
Планировщик задач ограничен в своей способности планировать задачу при завершении работы. Аналогичный вопрос был задан в отношении переполнения стека ( как запланировать задачу при запуске при выключении окон), и ответы там описывают несколько методов, отличных от использования диспетчера задач, включая групповую политику Метод редактора, который подробно описан и может быть лучшим способом справиться с этим.
Планировщик заданий можно использовать вместо редактора групповой политики. Тем не менее, это хорошо только для очень коротких задач, которые будут выполняться, пока система перезагружается или выключается, что обычно составляет всего несколько секунд.
Кроме того, обратите внимание, что статус задачи может быть:
Запрашиваемая операция не была выполнена, поскольку пользователь не вошел в сеть. Указанный сервис не существует. (0x800704DD)
Однако это не значит, что он не работал.
Для этого вам нужно будет настроить собственный фильтр событий в планировщике задач.
Триггеры > Создать > Пользовательский > Редактировать событие > XML
и вставьте следующее:
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">
*[System[Provider[@Name='User32'] and (Level=4 or Level=0) and (EventID=1074)]]
and
*[EventData[Data[@Name='param5'] and (Data='power off')]]
</Select>
</Query>
</QueryList>
Это позволит отфильтровать только событие отключения питания .
Если вы посмотрите в средстве просмотра событий, вы увидите в разделе «Журналы Windows» > «Система» на вкладке «Сведения» > «Просмотр XML» , что есть это.
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="User32" Guid="{xxxxx-xxxxxxxxxxx-xxxxxxxxxxxxxx-x-x}" EventSourceName="User32" />
<EventID Qualifiers="32768">1074</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x8080000000000000</Keywords>
<TimeCreated SystemTime="2021-01-19T18:23:32.6133523Z" />
<EventRecordID>26696</EventRecordID>
<Correlation />
<Execution ProcessID="1056" ThreadID="11288" />
<Channel>System</Channel>
<Computer>DESKTOP-REDACTED</Computer>
<Security UserID="x-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxx" />
</System>
- <EventData>
<Data Name="param1">Explorer.EXE</Data>
<Data Name="param2">DESKTOP-REDACTED</Data>
<Data Name="param3">Other (Unplanned)</Data>
<Data Name="param4">0x0</Data>
<Data Name="param5">power off</Data>
<Data Name="param6" />
<Data Name="param7">DESKTOP-REDACTED\username</Data>
</EventData>
</Event>
Вы можете протестировать запрос с помощью приведенного выше кода списка запросов в средстве просмотра событий, нажав
Создать пользовательское представление... > XML > Изменить запрос вручную
и вставьте код, присвоив ему имя « Только события выключения» , прежде чем попробовать его в планировщике задач.