Как включить и настроить Wake-on-LAN (WoL) в Windows?

Технология Wake on LAN (WoL) используется для удалённого пробуждения (включения) компьютера, который находится в спящем режиме (режиме пониженного энергопотребления). Сетевая карта компьютера инициирует процесс пробуждения компьютера после получение специального широковещательного пакета (magic packet) со своим MAC адресом. В этой статье мы рассмотрим, как настроить Wake on LAN на компьютере под управлением Windows.

В первую очередь нужно включить функцию Wake-on-LAN в настройках BIOS/UEFI компьютера. В зависимости от модели компьютера и версии прошивки название этой опции может отличаться. Она может называться:

  • WOL (Wake-on-LAN)
  • Power On By PCI-E
  • Resume by PCI-E Device
  • Resume by PME
  • S4/S5 Wake on LAN
  • ErP

Включить Wake On Lan в BIOS

На брендовых моделях компьютеров вы можете вывести и изменить настройки BIOS/UEFI с помощью PowerShell. Например, на ноутбуке Lenovo можно включить опцию WOL в BIOS командами:

$getLenovoBIOS = gwmi -class Lenovo_SetBiosSetting -namespace root\wmi
$getLenovoBIOS.SetBiosSetting("WakeOnLAN,Enable")
$SaveLenovoBIOS = (gwmi -class Lenovo_SaveBiosSettings -namespace root\wmi)
$SaveLenovoBIOS.SaveBiosSettings()

Затем нужно разрешить Wake on LAN (WOL) в настройках сетевого адаптера в Windows.

  1. Откройте диспетчер устройств ( devmgmt.msc );
  2. Разверните секцию Network Adapters и откройте свойства вашего физического сетевого адаптера;
  3. Перейдите на вкладку Advanced и проверьте, что опция Wake on magic packet включена (название может отличаться в зависимости от сетевой карты). В сетевых картах Intel эта опция может называться PME (Power Management Event); Включить WakeOnLan в настройках сетевой карты в Windows . Можно с помощью PowerShell проверить, включены ли опции WakeOnLan в настройках сетевого адаптера:
    Get-NetAdapter -Physical | Get-NetAdapterAdvancedProperty | where {($_.DisplayName -like '*WOL*') -or ($_.DisplayName -like '*Wake*')} PowerShell проверить что WOL включенЧтобы включить WOL с помощью PowerShell в настройках сетевого адаптера, можно использовать такую команду (зависит от драйвера и венднодоа NIC): Get-NetAdapter -Physical | Set-NetAdapterPowerManagement -WakeOnMagicPacket Enabled -WakeOnPattern Enabled
  4. Затем перейдите на вкладку Advanced и разрешите сетевой карте выводить компьютер из спящего режима. Включите опции Allow this device to wake the computer и Only allow a magic packet to wake the computer. Разрешить сетевой карте включать компьютер
    Можно включить эту опцию с помощью команды:
    powercfg /deviceenablewake "Realtek PCIe GbE Family Controller"
Беспроводные Wi-Fi адаптеры также поддерживают удаленное включение. Этот стандарт называется Wake on Wireless LAN (WoWLAN).

С помощью следующей команды можно проверить, каким устройствам разрешено будить компьютер:

powercfg /devicequery wake_armed

powercfg wake_armed - список устройств которым разрешено будить компьютер

В данном случае видно, что сетевой карте Realtek PCIe разрешено выводить компьютер из спящего режима.

Для работы Wake-on-LAN не нужно открывать дополнительный порты в Windows Defender Firewall. Широковещательный UDP пакет WOL (Magic Packet) принимается и обрабатывается непосредственно сетевой картой и не доходит до сетевого стека Windows.

Теперь, вы можете отправить WoL пакет для удаленного включения компьютера с другого устройства в той же локальной сети. Magic Packet содержит аппаратный адрес сетевой карты (MAC адрес), компьютера который нужно включить. Вы можете узнать MAC адрес сетевой карты компьютера из команды ipconfig /all или получить его с помощью PowerShell:

Get-NetAdapter -Physical

Get-NetAdapter -Physical - узнать MAC адрес компьютера

Вы можете сформировать и отправить широковещательный magic пакет WOL с помощью PowerShell. Укажите MAC адрес устройства, которое нужно включить в следующем скрипте и выполните его:

$Mac = "08:9e:01:6b:52:a2"
$MacByteArray = $Mac -split "[:-]" | ForEach-Object { [Byte] "0x$_"}
[Byte[]] $MagicPacket = (,0xFF * 6) + ($MacByteArray  * 16)
$UdpClient = New-Object System.Net.Sockets.UdpClient
$UdpClient.Connect(([System.Net.IPAddress]::Broadcast),7)
$UdpClient.Send($MagicPacket,$MagicPacket.Length)
$UdpClient.Close()

PowerShell скрипт для удаленного включения компьютера через WakeOnLan

Если вы все настроили правильно, удаленный компьютер должен проснуться.

Для работы WOL в сегментированных сетях или разделенных на VLAN, нужно включать пересылку широковещательных WoL пакетов ( UDP порт 9 ) на уровне коммутаторов/маршрутизаторов.

Для удаленного пробуждения компьютеров можно использовать бесплатную Windows утилиту от NirSoft WakeMeOnLan. Утилита позволяет автоматически просканировать LAN и найти все доступные устройства, или вы можете вручную добавить устройства, которые вы хотите включать удаленно через WakeOnLan.

Утилита WakeMeOnLan

Утилита поддерживает режим работы из командной строки. Чтобы включить компьютер, нужно выполнить команду (утилита отрезолвит IP адрес в MAC по arp таблице):

WakeMeOnLan.exe /wakeup 192.168.31.15

Или по MAC адресу:

WakeMeOnLan.exe /wakeup 08-9E-01-6B-52-A2

Также можно использовать утилиты для смартфонов. Например, Wake On LAN для Android (для удаленного включения компьютера вы должны быть подключены к той же LAN через Wi-Fi точку доступа).

Если компьютер не включается после отправки пакета Wake-on-LAN, возможно нужно LAN нужно отключить быстрый запуск Windows в настройках электропитания (на моих двух тестируемых устройствах с Windows 10 и 11 это не понадобилось). Fast Startup включен по-умолчанию в Windows 10 и 11 и может препятствовать пробуждению компьютера через WOL (или вызывать ситуацию, когда компьютер не выключается после завершения работы Windows).

Откройте панель powercfg.cpl -> Choose what the power buttons do -> Change settings that are currently unavailable -> отключите опцию Turn on fast startup (recommended). Отключить быстрый запуск Windows, если WOL не работает


Предыдущая статья Следующая статья


Комментариев: 8 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)