Заметки практикующего сисадмина

Дядя Саша Кузьмич пишет о работе

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 позволяет пробуждать компьютеры с помощью битовых шаблонов.

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

Комментарии

2 ответа для «Wake-on-LAN»

  1. Аватар пользователя Igor Oleinikov

    Пора давно писать не на VB, а, допустим на PowerShell =)

    1. Аватар пользователя Александр Кузьмин

      Все бы хорошо, но он далеко не на всех машинах бывает

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.