среда, 29 июня 2016 г.

Настройка Wake On Lan (WOL) при помощи Powershell

Поговорим о том, как активировать Wake On Lan (WOL) в Windows (7;8,1;10).
Сперва проверим, активирован ли режим WOL.
Через GUI - Управление компьютером > Диспетчер устройств > Сетевые адаптеры
Все сетевые адаптеры в системе
Настройки электропитания беспроводного сетевого адаптера
Подробное описание всех настроек можно найти тут. Нас интересуют чекбоксы "Разрешить этому устройству выводить компьютер из ждущего режима" и "Разрешать вывод компьютера из ждущего режима только с помощью "магического пакета"
Чтобы посмотреть эти настройки через powershell
$a = @{Expression={$_.__CLASS};Label="Название параметра"}, `
@{Expression={$_.Enable};Label="Включен"}
$b = @{Expression={$_.__CLASS};Label="Название параметра"}, `
@{Expression={$_.EnableWakeOnMagicPacketOnly};Label="Включен"}
$nics=Get-WmiObject win32_Networkadapter -Filter "netenabled = 'true'" # Ищем все активные интерфейсы
ForEach ($nic in $nics) {
gwmi MSPower_DeviceEnable -Namespace root\wmi | where{$_.instancename -match[regex]::escape($nic.PNPDeviceID) } | Format-List $a
gwmi MSPower_DeviceWakeEnable -Namespace root\wmi |where{$_.instancename -match[regex]::escape($nic.PNPDeviceID) } | Format-List $a
gwmi MSNdis_DeviceWakeOnMagicPacketOnly -Namespace root\wmi |where{$_.instancename -match[regex]::escape($nic.PNPDeviceID) } | Format-List $b}
Вывод команды должен выглядеть примерно так:
Название параметра : MSPower_DeviceEnable
Включен            : True
Название параметра : MSPower_DeviceWakeEnable
Включен            : True
Название параметра : MSNdis_DeviceWakeOnMagicPacketOnly
Включен            : True
"True" говорит нам о том, что галочка стоит. Если указано "False" то активируем чекбоксы с помощью powershell
$nics=Get-WmiObject win32_Networkadapter -Filter "netenabled = 'true'" # Ищем все активные интерфейсы
ForEach ($nic in $nics) {
$nicDeviceEnable=gwmi MSPower_DeviceEnable -Namespace root\wmi | where{$_.instancename -match[regex]::escape($nic.PNPDeviceID) } 
$nicDeviceWOL=gwmi MSPower_DeviceWakeEnable -Namespace root\wmi |where{$_.instancename -match[regex]::escape($nic.PNPDeviceID) } 
$nicDeviceWOLMagic=gwmi MSNdis_DeviceWakeOnMagicPacketOnly -Namespace root\wmi |where{$_.instancename -match[regex]::escape($nic.PNPDeviceID) } 
$nicDeviceEnable.Enable =$true; $nicDeviceEnable.psbase.Put() # Меняем и применяем параметр
$nicDeviceWOL.Enable =$true; $nicDeviceWOL.psbase.Put()
$nicDeviceWOLMagic.EnableWakeOnMagicPacketOnly =$true; $nicDeviceWOLMagic.psbase.Put()}
Теперь, когда настройки сделаны, попробуем вывести из режима сна подопытный компьютер. Используем готовый скрипт
function Send-WOL{
<# 
  .SYNOPSIS  
    Send a WOL packet to a broadcast address
  .PARAMETER mac
   The MAC address of the device that need to wake up
  .PARAMETER ip
   The IP address where the WOL packet will be sent to
  .EXAMPLE 
   Send-WOL -mac 00:11:32:21:2D:11 -ip 192.168.8.255 
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,Position=1)]
[string]$mac,
[string]$ip="255.255.255.255", 
[int]$port=9)
$broadcast = [Net.IPAddress]::Parse($ip)
$mac=(($mac.replace(":","")).replace("-","")).replace(".","")
$target=0,2,4,6,8,10 | % {[convert]::ToByte($mac.substring($_,2),16)}
$packet = (,[byte]255 * 6) + ($target * 16)
$UDPclient = new-Object System.Net.Sockets.UdpClient
$UDPclient.Connect($broadcast,$port)
[void]$UDPclient.Send($packet, 102)}
Далее просто
Send-WOL -mac %macaddress%
Готовые скрипты одним архивом

Не забывайте настроить BIOS для WOL 

Комментариев нет :

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