Удаленное включение и выключение Windows через Linux

Сценарий достаточно распространенный и нужный. У меня например дома на raspberry pi поднят homebridge который управляет моими немногочисленными умными девайсами, в число которых входит и Windows ПК. И понятно, что идея включения и выключения компьютера с телефона через Homekit очевидна.
Для включения нам понадобится команда etherwake, которая посылает на удаленный хост Wake-On-LAN «Magic Packet» и для выключения, или перезагрузки, net rpc shutdown

В Ubuntu Linux вы можете установить эти программы путем установки следующих пакетов:

В Alpine Linux (очень популярный дистрибутив для контейнеров docker):

После чего, все сводится к двум простым командам:
1. Включить это etherwake xx:yy:zz:11:22:33 (где xx:yy:zz:11:22:33 — MAС-адрес целевой машины)
2. Выключить net rpc shutdown -f -t0 -S ip.address -U user%password

Помимо это конечно правильным образом должен быть настроен ваш Windows ПК, а именно: в BIOS’e должен быть активен WOL (Wake-On-LAN), а в операционной системе Windows должен быть открыт 445-й порт

Открыть его можно в powershell:

Примечание: Обратите внимание на аргумент Profile, надо правильно указать тип сети в которой вы работаете.

Либо в классической командной строке:

Также при попытке выключения вы можете столкнуться дополнительно со следующими ошибками:
Проблема 1: Could not initialise pipe winreg. Error was NT_STATUS_OBJECT_NAME_NOT_FOUND
Для исправления включите службу удаленного реестра:

Проблема 2: WERR_CALL_NOT_IMPLEMENTED
В реестре по пути HKLM/Software/Microsoft/Windows/CurrentVersion/Policies/System
создайте ключ типа DWORD LocalAccountTokenFilterPolicy со значением 1

После этого вы с легкостью сможете включать и выключать свой Windows ПК через Linux через различные сценарии, которые вам понадобится реализовать на работе или дома.