Wake-on-LAN

Удаленное включение компьютеров по сети — очень полезный функционал, который совершенно напрасно недооценивается большинством системных администраторов. Установка обновлений, дефрагментация, поиск вирусов и многие другие задачи можно выполнять в нерабочее время, при этом совершенно необязательно заставлять пользователей оставлять свои компьютеры включенными. Достаточно лишь активировать функционал Wake-on-LAN в BIOS, не забыв при этом обратить внимание на настройку энергосберегающих технологий в режиме ожидания, и настроить функцию управления питанием в ОС. В настоящее время Wake-on-LAN — это не только «магический пакет», а целый набор разнообразных технологий, работоспособность которых зависит от функционала сетевого адаптера. Подробное описание поддерживаемых технологий, а также о настройке параметров питания сетевых адаптеров можно прочитать на Технете.

Для включения управления питанием сетевых адаптеров, а также активации дополнительных способов пробуждения можно воспользоваться следующим модифицированным скриптом:

Option Explicit
Dim colNetworkAdapters
Dim objNetworkAdapter
Dim strDevInstanceName
Dim strNetworkAdapterID
'Query for all of the Win32_NetworkAdapters that are wired Ethernet (AdapterTypeId=0 corresponds to Ethernet 802.3)
Set colNetworkAdapters = GetObject("WinMgmts:{impersonationLevel=impersonate}//./root/Cimv2").ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE AdapterTypeId=0")
For Each objNetworkAdapter In colNetworkAdapters
   strNetworkAdapterID = UCase(objNetworkAdapter.PNPDeviceID)
   'Query for all of the MSPower_DeviceWakeEnable classes
   Dim colPowerWakeEnables
   Dim objPowerWakeEnable
   Set colPowerWakeEnables = GetObject("WinMgmts:{impersonationLevel=impersonate}//./root/wmi").ExecQuery("SELECT * FROM MSPower_DeviceWakeEnable")
   'Compare the PNP Device ID from the network adapter against the MSPower_DeviceEnabled instances
   For Each objPowerWakeEnable In colPowerWakeEnables
      'We have to compare the leftmost part as MSPower_DeviceEnabled.InstanceName contains an instance suffix
      strDevInstanceName = UCase(Left(objPowerWakeEnable.InstanceName, Len(strNetworkAdapterID)))
      'Match found, enable WOL
      If StrComp(strDevInstanceName, strNetworkAdapterID)=0 Then
         objPowerWakeEnable.Enable = True
         'Required to write the value back to the object
         objPowerWakeEnable.Put_
      End If
   Next
   'Query for all of the MSNdis_DeviceWakeOnMagicPacketOnly classes
   Dim colMagicPacketOnlys
   Dim objMagicPacketOnly
   Set colMagicPacketOnlys = GetObject("WinMgmts:{impersonationLevel=impersonate}//./root/wmi").ExecQuery("SELECT * FROM MSNdis_DeviceWakeOnMagicPacketOnly")
   'Compare the PNP Device ID from the network adapter against the MSNdis_DeviceWakeOnMagicPacketOnly instances
   For Each objMagicPacketOnly In colMagicPacketOnlys
      'We have to compare the leftmost part as MSNdis_DeviceWakeOnMagicPacketOnly.InstanceName contains an instance suffix
      strDevInstanceName = UCase(Left(objMagicPacketOnly.InstanceName, Len(strNetworkAdapterID)))
      'Match found, enable WOL for Magic Packets only
      If StrComp(strDevInstanceName, strNetworkAdapterID)=0 Then
         'Set to false if you wish to wake on magic packets AND wake patterns
         objMagicPacketOnly.EnableWakeOnMagicPacketOnly = False
         'Required to write the value back to the object
         objMagicPacketOnly.Put_
      End If
   Next
Next

Если в выделенной жирным строчке изменить False на True, то для пробуждения будут использоваться только магические пакеты. На мой взгляд, не стоит намеренно ограничивать себя в технологиях пробуждения, т.к., например, Агент администрирования Kaspersky Security Center позволяет пробуждать компьютеры с помощью битовых шаблонов.

Оригинальный скрипт.

Wake-on-LAN: 2 комментария

Добавить комментарий