Запуск программы только при запуске ПК с использованием WOL

369
Inferno IV

Можно ли создать событие или скрипт для запуска при запуске компьютера с помощью Wake-On-Lan?

Я не хочу запускать программу (автоматически), когда компьютер запускается нормально.

3
Нет отдельного события Windows, если машина включена с помощью WOL или включена с помощью других средств (кнопка питания). Ramhound 5 лет назад 1

2 ответа на вопрос

3
harrymc

Вот моя идея для создания такого триггера (но я не могу гарантировать успех). Поскольку у меня нет подходящей среды для тестирования идеи, с вашей стороны требуются некоторые эксперименты.

Следующая команда может использоваться для идентификации источника пробуждения:

powercfg -lastwake 

В случае Wake-On-Lan (WOL) сообщаемое wake-устройство будет вашим Ethernet-контроллером.

Как только вы узнаете, что произошло такое событие, и укажите точное имя источника пробуждения, я пойму, как добавить скрипт триггера:

  1. Откройте окно просмотра событий и найдите событие WOL (где источником пробуждения является контроллер Ethernet).
  2. Щелкните правой кнопкой мыши событие и выберите «Прикрепить задачу к этому событию ...»
  3. Выберите «Запустить программу» в качестве действия
  4. Добавьте Powershell.exeи путь к вашему скрипту
  5. Для большего контроля на шаге Готово установите флажок «Открыть свойства ...»
  6. На вкладке «Триггеры» отредактируйте триггер события, чтобы добавить более подробный запуск.

Некоторые ссылки и примеры, которые помогут начать работу:

Это работает только в том случае, если компьютер спал, а не в тот момент, когда он действительно запускается (при включенном питании). Решение не найдено ... Inferno IV 5 лет назад 0
Вы искали все события, источником которых является контроллер Ethernet? harrymc 5 лет назад 0
Нет источника с именем Ethernet-контроллер. Я искал с момента запуска компьютера, это событие отображается: «Операционная система запущена в системное время 2018 - 07 - 27T06: 28: 13.494838200Z». (General-Kernel). Но нет никаких событий до или после запуска WoL. Единственное, что можно найти, это: «Тип загрузки был 0x0.», Что означает: холодная загрузка из полного выключения. Так что, к сожалению, нет никаких признаков, если компьютер запускается из WoL .. Inferno IV 5 лет назад 0
Источник будет называться не «контроллер Ethernet», а имя сетевого адаптера. Кроме того, у вас есть события с источником Kernel-Power? harrymc 5 лет назад 0
У меня есть события с исходным ядром Kernel-Power, однако они одинаковы для загрузки WoL и нормальной загрузки. Нет никаких событий на сетевом адаптере во время загрузки. Inferno IV 5 лет назад 0
Очевидно, это означает, что при полном отключении процесс WOL слишком аппаратный, чтобы регистрироваться Windows. Таким образом, решение может работать только в спящем режиме, когда Windows все еще находится в памяти и контролирует оборудование. harrymc 5 лет назад 0
2
Tonny

Как уже упоминал Ramhound в комментариях, Windows не знает, как был включен компьютер. (WOL, событие таймера Bios, ручное включение и т. Д.)

Единственное, что вы можете получить из Windows, это то, произошел ли запуск компьютера после обычного перезапуска или события выключения, или если компьютер был запущен после неожиданного отключения питания или принудительного выключения.
Эту информацию можно найти в журнале событий.

Лучшее, что вы можете сделать, применимо, если вы точно знаете, что событие WOL происходит только в тот период времени, когда вы никогда не будете использовать свой компьютер самостоятельно. Вы можете настроить запуск запланированного задания каждые 5 минут или около того в течение того периода времени, когда запускается скрипт для запуска приложения.
Задача должна быть сконфигурирована так, чтобы НЕ будить компьютер, поэтому он запускается только в том случае, если компьютер разбудил WOL. Сценарий должен сначала проверить, запущено ли уже приложение (если это: выход), и запустить приложение, если оно еще не запущено.

Дополнительно: если событие WOL происходит в случайное время, вы все равно можете использовать подход по расписанию, если вы настроили на своем компьютере НЕ использовать автоматический вход в систему. Если перед выходом из спящего режима вы обязательно выйдите из системы, компьютер выйдет из спящего режима по событию WOL, и никто не войдет в систему.
Вы можете проверить это в запланированной задаче и запустить приложение, только если нет. Один из них вошел в систему. Это немного сложнее, поскольку Windows не предоставляет легкой проверки для этого. Мой обычный подход к этому заключается в использовании tasklist | findstr explorer. Если есть пользователи, вошедшие в систему, вы получите 1 строку для каждого пользователя, потому что у каждого есть своя собственная копия файла explorer.exe. Но если никто не вошел в систему, то не работает ни один explorer.exe.

Похожие вопросы