Скрипт для включение компьютера по wake on lan
Wake On Lan - технология, которую поддерживают материнские платы и сетевые карты, позволяющая включать компьютер, когда на его сетевой интерфейс приходит специальный пакет. Чтобы воспользоваться возможностью WOL нужно:
- Включить в BIOS опцию включения по сигналу на сетевую карту;
- Возможно потребуется настроить сетевую карту на прием WOL;
Пример настройки для материнской платы Asus m4a785td-v evo:
Powershell скрипт для отправки пакета WOL
Send-WOL.ps1 - скрипт, который посылает пакет WOL на указанный ip адрес. Обязательным параметром является mac адрес устройства, которому адресован данный пакет.
Если не указывать ip, то будет использован широковещательный адрес 255.255.255.255, т.о пакет будет отправлен всем компьютерам локальной сети. Однако включиться только тот, который имеет указанный mac адрес.
Если ваш компьютер выходит в интернет через роутер
Чтобы включать компьютер локальной сети, посылая пакет WOL из интернета, нужно настроить port forwarding в маршрутизаторе. Пакеты приходящие на определенный порт (например, 9, можно использовать любой порт) по протоколу UDP должны передаваться на нужный локальный IP адрес. Если в port forwarding настроить перенаправление (с внешнего порта) на широковещательный (внутренний) адрес 255.255.255.255, то т.о. можно пробуждать из интернета любой компьютер локальной сети, указывая в пакете WOL нужный mac адрес.
WOL after power loss/failure
Существует проблема: Если материнская плата будет обесточена, а затем снова подключена к питанию, то она уже не будет включать компьютер по сигналу WOL. Эта проблема решается:
- использованием источника бесперебойного питания (ИБП);
- или настройкой BIOS: POWER \ APM Configuration \ Restore on AC Power Loss : Power On. Без ИБП, но с настройкой включения, компьютер будет включаться и не использоваться после короткой обесточки, что может быть нежелательным. Поэтому удобно использовать ИБП + настройку BIOS. В этом случае короткие обесточки не прервут подачу питания на материнскую плату и WOL будет функционировать, а если все-таки случиться прерывание питания, то настройка Restore on AC Power Loss включит компьютер.
Enable WOL on network adapter
ifconfig -a - посмотреть список сетевых интерфейсов вместе с MAC адресами ( apt install net-tools ) ethtool $if - посмотреть настройки сетевого адаптера, в т.ч. возможность WOL ( apt install ethtool ).
В примере выше видим, что для enp7s0 WOL поддерживается, об этом говорит строка Supports Wake-on: pumbg . Параметр Wake-on показывает включен ли режим WOL. Значение d - выключен, g - включен. В свою очередь для vmbr0 нет параметров Supports Wake-on и Wake-on , что означает, что этот сетевой интерфей WOL не поддерживает.
Включить/выключить WOL можно командой:
- ethtool -s enp7s0 wol g - включить
- ethtool -s enp7s0 wol d - выключить
Отправка магического пакета
Для отправки магического пакета можно использовать утилиту wakeonlan
Настройка WOL для компьютера с proxmox (с настроенным Virtual Machine Bridge).
На компьютере с одной серевой картой, после установки proxmox конфигурация сети будет состоять из трех сетевых интерфейсов:
Видно, что интерфейс vmbr0 (Virtual Machine Bridge) имеет IP адрес, а enp7s0 не имеет.
Посмотрим настройки сети:
На описанной конфигурации отправка магического паента для MAC интерфейса vmbr0 ничего не даст. Отправлять нужно на MAC реальной сетевой карты. Т.е. для описанной конфигурации сработает команда:
Стоит отметить, что если рассылать пакет не на широковещательный адрес, а на конкретный:
то почему-то это не работает.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
У администраторов, часто бывают ситуации, когда надо включить компьютер, а физического доступа к нему нет. Например чтобы проводить в не рабочее время обновления системы или провести очередную проверку на наличие вирусов.
Bytes and Byte Arrays
PowerShell is able to easily create a byte array with all this information that you can then broadcast to your target machine.
To create a byte or byte array in PowerShell, it’s a good practice to explicitly tell PowerShell that you want a value or variable to be treated as a byte/byte array. This is known as casting. If you don’t cast your bytes and byte arrays, PowerShell will often try and convert your values while manipulating them.
Here’s an example of explicitly casting a byte variable called $Byte and a byte array called $ByteArray:
Since we are going to be using the MAC address of a machine to send a WOL magic packet, we’ll need to be able to convert the MAC address to a byte array. Since MAC addresses are 6 hexadecimal octets, this is really simple in PowerShell. We will just follow the example of the previous byte array:
If the MAC address was: 1A:2B:3C:4D:5E:6F
The associated byte array would be made (in PowerShell) like this:
This makes constructing the WOL magic packet really simple and straightforward.
The WOL magic packet is a byte array with 6 bytes of value 255 and then 16 repetitions of the MAC address. If you wanted to write this entirely out by hand, the byte array would look something like this:
[Byte[]] $ByteArray = 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F
That is rather repetitive and prone to error should you want to ever modify it for another MAC address.
Сначала немного о Wake-on-LAN:
Wake-on-LAN — технология позволяющая включить компьютер, с помощью сетевой карты.
Для того, что бы это удалось сетевая карта данного компьютера должна получить «Magic packet».
На практике для этого компьютер должен удовлетворять следующим требованиям:
Блок питания должен соответствовать стандарту ATX 2.01
Материнская плата должна поддерживать Wake-on-LAN
Сетевая плата должна поддерживать Wake-on-LAN, если сетевая плата внешняя и не соответствует стандарту PCI 2.2 то необходим специальный трёхжильный кабель, для соединения разъёмов Wake-on-LAN на материнской плате и на сетевой карте.
Так же соответствующие настройки должны быть включены, как в биосе материнской платы, так и в драйверах сетевой карты.
На практике все современные компьютеры поддерживают эти технологии. Поэтому вопрос может возникнуть о включении Wake-on-LAN для этого рекомендую почитать инструкцию к материнской плате.
Так же следует учесть, что сетевая карта должна «слушать» сеть в ожидании «Magic packet». Для этого интерфейс ACPI не должен переходить в состояние G3, то есть в механическое выключение системы. Это может произойти при сбое питания компьютера.
Например:
Выключение компьютера из «розетки».
Аварийное выключение (зажатие кнопки питания на 10 секунд).
Выключение компьютера с блоком питания AT.
Что же такое Magic packet?
Это 6 байт забитых «0xFF» — называемые цепочкой синхронизации.
И дальше 96 байт, в которых mac адрес включаемого компьютера повторяется 16 раз.
Всё это можно упаковать в UDP или IPX пакет. Обычно используется UDP.
Следовательно, если компьютер с которого отсылается «Magic packet» и компьютер который мы хотим включить по Wake-on-LAN находится в одной подсети. То нам надо знать mac адрес сетевой карты включаемого компьютера.
Если нам надо разбудить компьютер в другой подсети, то нам так же надо знать ip адрес который может переслать broadcast в подсеть с включаемым компьютером. В качестве такого ip может выступать ip самого включаемого компьютера, тогда UDP пакет уйдёт к нужному компьютеру. Однако у меня этот вариант не сработал из за частой очистки ARM таблицы на маршрутизаторах. Это выглядело так, что через некоторое время компьютер переставал включаться.
И так все технические моменты решены и нам надо сформировать «Magic packet».
… а также без проброса портов, SSH/telnet и установки сторонних приложений. С любого компьютера, подключённого к интернет и даже с телефона!
Где ifname — имя интерфейса, с которого будет рассылаться волшебный пакет, XX:XX:XX:XX:XX:XX — mac адрес вашего компьютера.
Вроде всё просто, но Winbox с телефона не особо запускается и mac адрес по памяти замучаешься вводить. Можно запускать SSH и отправлять в него одну единственную команду, но это тоже долго и нудно. Используем фаервол!
Напрямую из правил фильтра запускать исполнение команд нельзя, из всех действий нам больше всех подойдёт добавление адреса в address-list, т.к. оно позволяет создать новый объект в операционной системе роутера, доступный из скриптов.
Добавим новое правило для цепочки input и расположим его среди других разрешающих правил этой цепочки. Укажем протокол tcp и dst-port — любой из верхних портов.
Действие выберем add src (можно и dst) to address list, укажем имя листа.
Для отслеживания появления записей используем планировщик. Заходим System -> Sheduler, создаём задание планировщика, задаём имя. Указываем Start time: startup, и желаемый интервал, к примеру каждые 15 секунд.
В поле on event напишем простенький скрипт:
Не забываем указать правильный mac, имя интерфейса и адрес-листа. Данный скрипт при обнаружении элементов в адрес-листе выполнит команду, отправляющую магические пакеты на ваш компьютер, после чего удалит запись из адрес-листа.
Только не забывайте про безопасность, данный способ ничем не защищён и кто угодно может включить Ваш компьютер, зная или подобрав нужный порт. Для защиты можно использовать VPN, port knocking, whitelist или метод Неуловимого Джо — решать Вам. Если Вам требуется включать таким образом по-отдельности несколько компьютеров, создайте соответствующее количество правил на разных портах, каждое из которых будет кидать адреса в свой адрес-лист, скрипт в задании планировщика также размножаем через Ctrl+C, Ctrl+V, либо создаём отдельные задания для каждого — как хотите.
Wake-on-LAN (WOL; в переводе с англ. — «пробуждение по [сигналу из] локальной сети») — технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтов. wiki
И все бы хорошо, если бы не одно но. После сбоя питания ваш компьютер не включится.
Согласитесь, это будет «приятной» неожиданностью, особенно если вы находитесь за пару тысяч километров от него.
Одно из решений написано здесь, но оно аппаратно-программное, а ведь можно обойтись без дополнительного железа.
Про WOL на Хабре можно найти уже две станицы. Поэтому в этой статье не будет рассматриваться включение wol на карточке.
Введение
Для начала разберемся, почему компьютер не включится. Для понимания этого стоит обратится к ACPI.
ACPI — англ. Advanced Configuration and Power Interface — усовершенствованный интерфейс управления конфигурацией и питанием). В ACPI описаны состояния — как глобальные, так и конкретных устройств в частности. (wiki)
- G2 (S5) (soft-off) — мягкое (программное) выключение; система полностью остановлена, но под напряжением, готова включиться в любой момент. Системный контекст утерян.
- G3 (mechanical off) — механическое выключение системы; блок питания ATX отключен.
- «Stay Off» – при потере питания в сети и его восстановлении для включения ПК необходимо нажать кнопку питания.
- «Turn On» – восстановление питания вызывает автоматическое включение системы.
- «Last State» – Восстановление системы в то состояние, в котором она находилась на момент пропадания питания. Если была выключены — остается выключена, иначе включается.
Выбрав «Turn On», останется вопрос лишь в том, как выключить компьютер, когда он включился после сбоя питания, а не от запроса по сети или штатного запуска кнопкой на корпусе. Делать эти проверки мы будем в initrd.
Initrd (сокращение от англ. Initial RAM Disk, диск в оперативной памяти для начальной инициализации) — временная файловая система, используемая ядром Linux при начальной загрузке. (wiki_ru) (wiki_en)
Расположение файлов для initrd в Ubuntu/Debian можно посмотреть в man на initramfs-tools (онлайн с сайта Ubuntu).
Для Centos все немного по другому — там dracut.
Для обеспечения проверки, как был включен компьютер, после посылки wol пакета мы будем пинговать его. Но так как пакет WOL у нас «магический», пусть пинги будут тоже «магическими». Пусть наши пинги будут размером в 48 байт, а не в 84.
Итого вся идея в виде блок-схемы:
Реализация
Модули
В /etc/initramfs-tools/modules добавим необходимые модули для работы iptables и сети.
Модуль для вашей сетевой карты
Модули iptables
Скрипт
В /etc/initramfs-tools/scripts/local-top/ добавим файл checkboot с содержимым:
И делаем его исполняемым:
Скрипт реализует блок-схему, приведенную выше.
В /etc/initramfs-tools/hooks/ добавим файл checkboot с содержимым:
И делаем его исполняемым:
Этот файл указывает, что необходимо добавить в initrd для корректной работы нашего скрипта.
В нем после копирования утилит iptables и ifconfig необходимо так же скопировать библиотеки для iptables.
Слинкованные библиотеки можно получить, выполнив ldd /sbin/iptables.
Но в процессе работы также будут использоваться динамически подгружаемые модули. Их список можно увидеть, выполнив команду:
Что позволит получить остальные подгружаемые библиотеки:
Update initrd
Перед обновлением initrd хорошей идеей является скопировать стабильный вариант в /boot с другим именем, чтобы в случае каких-либо ошибок в скрипте/хуке загрузка системы не представляла сложности.
Обновляем initrd командой:
Добавляем новые строчки в grub с nocheckboot.
Делаем это либо непосредственным редактированием /boot/grub/grub.cfg с созданием нового пункта с добавлением nocheckboot в строке параметров к ядру, либо изменяя /etc/grub.d/10_linux, что лучше, так как после update-grub2 наши изменения не исчезнут, как случится, если мы будем редактировать grub.cfg.
Для этого в /etc/grub.d/10_linux добавляем:
Запуск
Осталось только написать скрипт запуска.
И вот он:
Здесь "-c 50" — это 50 пакетов, 1 пакет в секунду, а значит 50 секунд — время, за которое должны пройти все этапы до «Проверка счетчика правила iptables». А "-s 20" делает размер пакета равным 48 байтам. 48 — 20 = 28 байт — заголовки IP и ETHERNET.
Вместо заключения
Вот и все, теперь вы не потеряете доступ к машинам из-за сбоя питания.
Конечно, здесь ещё можно поговорить про UPS, но задача состояла в поиске решения без использования UPS.
Такая схема полезна в том случае, если вам нужен доступ к вашим компьютерам (доступ к данным, проведение вычислений), которые основное время прибывают в выключенном состоянии и ждут вас.
Recently, I’ve had the opportunity to learn more about how WOL magic packets work. That got me thinking about how to create my own magic packet via PowerShell.
Up until this point, I hadn’t really put much thought into sending individual Wake-on-LAN (WOL) packets to individual machines in our network, seeing as it is super easy to do that by using PDQ Inventory and PDQ Deploy.
Сначала немного о Wake-on-LAN:
Wake-on-LAN — технология позволяющая включить компьютер, с помощью сетевой карты.
Для того, что бы это удалось сетевая карта данного компьютера должна получить «Magic packet».
На практике для этого компьютер должен удовлетворять следующим требованиям:
Блок питания должен соответствовать стандарту ATX 2.01
Материнская плата должна поддерживать Wake-on-LAN
Сетевая плата должна поддерживать Wake-on-LAN, если сетевая плата внешняя и не соответствует стандарту PCI 2.2 то необходим специальный трёхжильный кабель, для соединения разъёмов Wake-on-LAN на материнской плате и на сетевой карте.
Так же соответствующие настройки должны быть включены, как в биосе материнской платы, так и в драйверах сетевой карты.
На практике все современные компьютеры поддерживают эти технологии. Поэтому вопрос может возникнуть о включении Wake-on-LAN для этого рекомендую почитать инструкцию к материнской плате.
Так же следует учесть, что сетевая карта должна «слушать» сеть в ожидании «Magic packet». Для этого интерфейс ACPI не должен переходить в состояние G3, то есть в механическое выключение системы. Это может произойти при сбое питания компьютера.
Например:
Выключение компьютера из «розетки».
Аварийное выключение (зажатие кнопки питания на 10 секунд).
Выключение компьютера с блоком питания AT.
Что же такое Magic packet?
Это 6 байт забитых «0xFF» — называемые цепочкой синхронизации.
И дальше 96 байт, в которых mac адрес включаемого компьютера повторяется 16 раз.
Всё это можно упаковать в UDP или IPX пакет. Обычно используется UDP.
Следовательно, если компьютер с которого отсылается «Magic packet» и компьютер который мы хотим включить по Wake-on-LAN находится в одной подсети. То нам надо знать mac адрес сетевой карты включаемого компьютера.
Если нам надо разбудить компьютер в другой подсети, то нам так же надо знать ip адрес который может переслать broadcast в подсеть с включаемым компьютером. В качестве такого ip может выступать ip самого включаемого компьютера, тогда UDP пакет уйдёт к нужному компьютеру. Однако у меня этот вариант не сработал из за частой очистки ARM таблицы на маршрутизаторах. Это выглядело так, что через некоторое время компьютер переставал включаться.
И так все технические моменты решены и нам надо сформировать «Magic packet».
… а также без проброса портов, SSH/telnet и установки сторонних приложений. С любого компьютера, подключённого к интернет и даже с телефона!
Где ifname — имя интерфейса, с которого будет рассылаться волшебный пакет, XX:XX:XX:XX:XX:XX — mac адрес вашего компьютера.
Вроде всё просто, но Winbox с телефона не особо запускается и mac адрес по памяти замучаешься вводить. Можно запускать SSH и отправлять в него одну единственную команду, но это тоже долго и нудно. Используем фаервол!
Напрямую из правил фильтра запускать исполнение команд нельзя, из всех действий нам больше всех подойдёт добавление адреса в address-list, т.к. оно позволяет создать новый объект в операционной системе роутера, доступный из скриптов.
Добавим новое правило для цепочки input и расположим его среди других разрешающих правил этой цепочки. Укажем протокол tcp и dst-port — любой из верхних портов.
Действие выберем add src (можно и dst) to address list, укажем имя листа.
Для отслеживания появления записей используем планировщик. Заходим System -> Sheduler, создаём задание планировщика, задаём имя. Указываем Start time: startup, и желаемый интервал, к примеру каждые 15 секунд.
В поле on event напишем простенький скрипт:
Не забываем указать правильный mac, имя интерфейса и адрес-листа. Данный скрипт при обнаружении элементов в адрес-листе выполнит команду, отправляющую магические пакеты на ваш компьютер, после чего удалит запись из адрес-листа.
Только не забывайте про безопасность, данный способ ничем не защищён и кто угодно может включить Ваш компьютер, зная или подобрав нужный порт. Для защиты можно использовать VPN, port knocking, whitelist или метод Неуловимого Джо — решать Вам. Если Вам требуется включать таким образом по-отдельности несколько компьютеров, создайте соответствующее количество правил на разных портах, каждое из которых будет кидать адреса в свой адрес-лист, скрипт в задании планировщика также размножаем через Ctrl+C, Ctrl+V, либо создаём отдельные задания для каждого — как хотите.
Wake-on-LAN (WOL; в переводе с англ. — «пробуждение по [сигналу из] локальной сети») — технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтов. wiki
И все бы хорошо, если бы не одно но. После сбоя питания ваш компьютер не включится.
Согласитесь, это будет «приятной» неожиданностью, особенно если вы находитесь за пару тысяч километров от него.
Одно из решений написано здесь, но оно аппаратно-программное, а ведь можно обойтись без дополнительного железа.
Про WOL на Хабре можно найти уже две станицы. Поэтому в этой статье не будет рассматриваться включение wol на карточке.
Введение
Для начала разберемся, почему компьютер не включится. Для понимания этого стоит обратится к ACPI.
ACPI — англ. Advanced Configuration and Power Interface — усовершенствованный интерфейс управления конфигурацией и питанием). В ACPI описаны состояния — как глобальные, так и конкретных устройств в частности. (wiki)
- G2 (S5) (soft-off) — мягкое (программное) выключение; система полностью остановлена, но под напряжением, готова включиться в любой момент. Системный контекст утерян.
- G3 (mechanical off) — механическое выключение системы; блок питания ATX отключен.
- «Stay Off» – при потере питания в сети и его восстановлении для включения ПК необходимо нажать кнопку питания.
- «Turn On» – восстановление питания вызывает автоматическое включение системы.
- «Last State» – Восстановление системы в то состояние, в котором она находилась на момент пропадания питания. Если была выключены — остается выключена, иначе включается.
Выбрав «Turn On», останется вопрос лишь в том, как выключить компьютер, когда он включился после сбоя питания, а не от запроса по сети или штатного запуска кнопкой на корпусе. Делать эти проверки мы будем в initrd.
Initrd (сокращение от англ. Initial RAM Disk, диск в оперативной памяти для начальной инициализации) — временная файловая система, используемая ядром Linux при начальной загрузке. (wiki_ru) (wiki_en)
Расположение файлов для initrd в Ubuntu/Debian можно посмотреть в man на initramfs-tools (онлайн с сайта Ubuntu).
Для Centos все немного по другому — там dracut.
Для обеспечения проверки, как был включен компьютер, после посылки wol пакета мы будем пинговать его. Но так как пакет WOL у нас «магический», пусть пинги будут тоже «магическими». Пусть наши пинги будут размером в 48 байт, а не в 84.
Итого вся идея в виде блок-схемы:
Реализация
Модули
В /etc/initramfs-tools/modules добавим необходимые модули для работы iptables и сети.
Модуль для вашей сетевой карты
Модули iptables
Скрипт
В /etc/initramfs-tools/scripts/local-top/ добавим файл checkboot с содержимым:
И делаем его исполняемым:
Скрипт реализует блок-схему, приведенную выше.
В /etc/initramfs-tools/hooks/ добавим файл checkboot с содержимым:
И делаем его исполняемым:
Этот файл указывает, что необходимо добавить в initrd для корректной работы нашего скрипта.
В нем после копирования утилит iptables и ifconfig необходимо так же скопировать библиотеки для iptables.
Слинкованные библиотеки можно получить, выполнив ldd /sbin/iptables.
Но в процессе работы также будут использоваться динамически подгружаемые модули. Их список можно увидеть, выполнив команду:
Что позволит получить остальные подгружаемые библиотеки:
Update initrd
Перед обновлением initrd хорошей идеей является скопировать стабильный вариант в /boot с другим именем, чтобы в случае каких-либо ошибок в скрипте/хуке загрузка системы не представляла сложности.
Обновляем initrd командой:
Добавляем новые строчки в grub с nocheckboot.
Делаем это либо непосредственным редактированием /boot/grub/grub.cfg с созданием нового пункта с добавлением nocheckboot в строке параметров к ядру, либо изменяя /etc/grub.d/10_linux, что лучше, так как после update-grub2 наши изменения не исчезнут, как случится, если мы будем редактировать grub.cfg.
Для этого в /etc/grub.d/10_linux добавляем:
Запуск
Осталось только написать скрипт запуска.
И вот он:
Здесь "-c 50" — это 50 пакетов, 1 пакет в секунду, а значит 50 секунд — время, за которое должны пройти все этапы до «Проверка счетчика правила iptables». А "-s 20" делает размер пакета равным 48 байтам. 48 — 20 = 28 байт — заголовки IP и ETHERNET.
Вместо заключения
Вот и все, теперь вы не потеряете доступ к машинам из-за сбоя питания.
Конечно, здесь ещё можно поговорить про UPS, но задача состояла в поиске решения без использования UPS.
Такая схема полезна в том случае, если вам нужен доступ к вашим компьютерам (доступ к данным, проведение вычислений), которые основное время прибывают в выключенном состоянии и ждут вас.
Recently, I’ve had the opportunity to learn more about how WOL magic packets work. That got me thinking about how to create my own magic packet via PowerShell.
Up until this point, I hadn’t really put much thought into sending individual Wake-on-LAN (WOL) packets to individual machines in our network, seeing as it is super easy to do that by using PDQ Inventory and PDQ Deploy.
Putting it All Together
Fortunately, there is a much easier way to write that in PowerShell. This assumes that your $Mac value uses either colons or hyphens to separate the hex values with ForEach-Object:
$Mac = "1A:2B:3C:4D:5E:6F" $MacByteArray = $Mac -split "[:-]" | ForEach-Object < [Byte] "0x$_">[Byte[]] $MagicPacket = (,0xFF * 6) + ($MacByteArray * 16)
If you’re wondering about that comma in (,0xFF * 6), there’s a good explanation on Array Literals at the Windows PowerShell blog.
Now that we’ve got our official magic packet array, we need to be able to broadcast that to our subnet in order to wake up the appropriate target machine.
Wake-on-LAN and the Magic Packet
Wake-on-LAN works by broadcasting the magic packet to all network devices in a network. The network device that has a matching MAC address is instructed to be woken up, should they be configured to handle Wake-on-LAN requests.
Читайте также: