Оглавление:
Статья последний раз была обновлена 23.01.2026
Сегодня немного дикая задача и не менее дикое исполнение. Все происходит на Windows 11. Значит, у нас есть рабочая станция и виртуальная машина Hyper-V с LAMP на борту и, собственно, разрабатываемым сайтом (все это внезапно расположено на отдельном HDD, подключенном к виртуалке напрямую). Нам необходимо, чтобы при запуске этой виртуальной машины, у которой задан статический IP-адрес в нашей локальной сети, вносились изменения в файл hosts рабочей станции, а при ее остановке — удалялись. Цель проста, нужно чтобы домен сайта в период разработки сопрягался с конкретным IP в сети, и отображался в браузере будто это «настоящий» сайт с прода. После деплоя мы выключаем виртуальную машину и в нашем браузере отображается сайт с «боевого» сервера, пока никакие кэширования еще не мешали этому процессу, даже Redis.
Шаг 1. Ищем триггеры
Для отслеживания статуса виртуальной машины (включение/выключение) потребуется стандартная программа Windows — «Просмотр событий», ее можно запустить через «Win+R» командой eventvwr.msc

Код события журнала Windows (EventID) уникален в рамках одного источника, поэтому его можно смело использовать для наших целей.
Таким образом, я получил код включения (загрузки гостевой операционной системы) — 18601 и выключения — 18508. У вас эти коды будут, естественно, другими. Нас также интересует графа «Источник». Для включения Hyper-V-Chipset, а для выключения Hyper-V-Worker. Можно не углубляться в дебри, с целью осмыслить все эти значения.
- Почему включение — Hyper-V-Chipset? Источник Hyper-V-Chipset регистрирует события, связанные с виртуальной «аппаратной» составляющей. Когда вы запускаете ВМ, происходит инициализация виртуального оборудования. Событие 18601 означает, что виртуальный «чипсет» успешно прошел сброс и готов к загрузке гостевой ОС. Это самый близкий к моменту «старта железа» программный маркер.
- Почему выключение — Hyper-V-Worker? Источник Hyper-V-Worker (процесс vmwp.exe) отвечает за управление состоянием всей ВМ как процесса в хостовой системе. Когда ВМ завершает работу, именно этот процесс фиксирует закрытие всех дескрипторов, сохранение состояния и фактическую остановку исполнения кода. Событие 18508 генерируется в момент, когда процесс vmwp.exe подтверждает успешный переход ВМ в состояние «выключено».
Шаг 2. Записываем команды в сценарии
Мы получили триггеры, события по которым должны осуществляться определенные действия. В нашем случае, это добавление записи в конец файла hosts (C:\Windows\System32\drivers\etc\hosts) с последующим ее бесследным удалением.
Под действием надо понимать запуск программы — скрипта. В идеале использовать нативный для Windows командный язык PowerShell, но я с ним плохо знаком и посему использую 2 небольших сценария для оболочки Bash, которая доступна в Windows через WSL.
Содержимое файла example.com_START.sh
#!/usr/bin/bash echo -en '\n127.0.0.1 example.com' >> /mnt/c/Windows/System32/drivers/etc/hosts
Содержимое файла example.com_END.sh
#!/usr/bin/bash sed -i -e 's/127.0.0.1 example.com//g' -e '/^[[:space:]]*$/d' /mnt/c/Windows/System32/drivers/etc/hosts
Оба файла я помещаю в папку C:\Users\kupereal\Desktop\wsl_scripts\, к себе на рабочий стол. Файлы Windows в среде WSL всегда исполняемые (777).
Шаг 3. Настраиваем планировщик
Чтобы все заработало нам потребуется стандартная программа Windows — «Планировщик задач», запускается через «Win+R» командой taskschd.msc
- В левом боковом меню на пункте «Библиотека планировщика задач» вызываем контекстное меню и создаем папку с именем change_hosts (любым другим).
- Теперь уже на этой папке снова вызываем контекстное меню и создаем задачу.

Для полного понимания. У меня эти задачи уже созданы, поэтому я привожу скрины из их свойств через контекстное меню, там где я нажимаю «Изменить…», вы должны нажимать «Создать…».
Теперь разберем первую задачу по скринам без лишних слов.



Перечислю значения, вписанные в основные поля на последнем скрине:
- Программа или сценарий: powershell.exe
- Добавить аргументы: wsl ./example.com_START.sh
- Рабочая папка: C:\Users\kupereal\Desktop\wsl_scripts
Вторая задача создается практически полностью идентично первой.



Перечислю значения, вписанные в основные поля на последнем скрине:
- Программа или сценарий: powershell.exe
- Добавить аргументы: wsl ./example.com_END.sh
- Рабочая папка: C:\Users\kupereal\Desktop\wsl_scripts
- Изменяем файл hosts автоматически при старте виртуальной машины Hyper-V с сайтом - 23.01.2026
- Настраиваем плагин Clearfy для WordPress - 05.06.2025
- Поднимаем веб-сервер на Ubuntu - 16.09.2024