Удаленное включение компьютеров по сети — очень полезный функционал, который совершенно напрасно недооценивается большинством системных администраторов. Установка обновлений, дефрагментация, поиск вирусов и многие другие задачи можно выполнять в нерабочее время, при этом совершенно необязательно заставлять пользователей оставлять свои компьютеры включенными. Достаточно лишь активировать функционал 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 позволяет пробуждать компьютеры с помощью битовых шаблонов.
Оригинальный скрипт.