Управление питанием сетевого адаптера Wake-on-LAN с PowerShell
@RaiJu, пост для вас.
Подробное руководство по настройке Wake-on-LAN и Magic Packet с помощью PowerShell.
Magic Packet — это специальный сетевой фрейм, посылаемый для пробуждения устройства через Wake-on-LAN. Чтобы WoL работал, сетевой адаптер должен поддерживать Magic Packet и быть настроен на его приём.
Дисклеймер. На пикабу нет редактора кода, поэтому картинками и плохим форматирование. В конце статьи вы найдете ссылку на github, где все нормально отображается.
Шаг 1: Идентификация устройства.
> Get-PnpDevice | Where-Object { $_.FriendlyName -like "*Realtek*" } | Select-Object FriendlyName, Status, Class, InstanceId
Эта команда говорит системе:
"Покажи мне все устройства, в названии которых есть слово «Realtek», и выведи по ним таблицу с четырьмя колонками: полное имя, статус, класс и системный ID."
Get-PnpDevice: Берет полный список всех Plug-and-Play устройств.
| (Конвейер): Передает список дальше.
Where-Object { ... }: Фильтрует список, оставляя устройства, чье имя (FriendlyName) содержит "Realtek".
| (Конвейер): Передает отфильтрованный список.
Select-Object ...: Форматирует вывод, показывая только нужные свойства.
Запоминаем устройство в $device
$device = Get-PnpDevice | Where-Object { $_.FriendlyName -like "*Realtek*" } | Select-Object FriendlyName, Status, Class, InstanceId
Записываем его свойства в переменные
> $DeviceName = $device.FriendlyName
> $InstanceId = $device.InstanceId
> $pmKey = "HKLM:\SYSTEM\CurrentControlSet\Enum\$InstanceId\Device Parameters"
Шаг 2: Глобальное разрешение на пробуждение
Команда powercfg дает устройству "официальное" разрешение от Windows на пробуждение системы.
> powercfg -deviceenablewake $DeviceName
Эта команда эквивалентна установке флажка "Разрешить этому устройству выводить компьютер из ждущего режима".
Отключение:
> powercfg -devicedisablewake $DeviceName
Шаг 3: Настройка драйвера.
Настройки WOL находятся в параметрах самого драйвера, которые хранятся в реестре. Чтобы установить флажок "Только разрешать магическому пакету выводить компьютер из ждущего режима", используем команду Set-ItemProperty.
> Set-ItemProperty -Path $pmKey -Name "*WakeOnMagicPacket" -Value 1
Обратное действие — отключение WOL (Value 0):
> Set-ItemProperty -Path $pmKey -Name "*WakeOnMagicPacket" -Value 0
Здесь возникает проблема. Имя этого параметра может отличаться у разных производителей. Например, для Intel это *WakeOnMagicPacket, а для Realtek — WakeOnMagicPacket (без *). Если настройка не применяется, проверьте правильное имя командой Get-ItemProperty -Path $pmKey и используйте его.
Шаг 4: Завершающая настройка через CIM
Для полной уверенности в том, что настройки управления питанием применены корректно, используем современный стандарт CIM (Common Information Model).
Находим CIM-объект, связанный с нашим устройством.
> $adapterCim = Get-CimInstance -Namespace root\wmi -ClassName MSPower_DeviceEnable | Where-Object { $_.InstanceName -like "*$($instanceId.Split('\')[-1])*" }
Применяем к нему изменения.
> if ($adapterCim) { Set-CimInstance -CimInstance $adapterCim -Property @{ Enable = $true } }
Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀
Другие статьи о PowerShell